c# OpenCvSharp透视矫正参数调整器

 透视矫正不够智能化,每次都要进行局部参数调整,不便于程序使用,程序流程还是那几个步骤;

1、读取图像、灰度化

2、高斯滤波

3、二值化

4、边缘检测

灰度化图

c# OpenCvSharp透视矫正参数调整器_第1张图片

上个图看看经过调整透视矫正边缘检测结果我还是挺满意的

c# OpenCvSharp透视矫正参数调整器_第2张图片

发现一个新问题获取最大面积的四个点有两个点重复在一个位置

c# OpenCvSharp透视矫正参数调整器_第3张图片

一、读取图像、灰度化

 固定化格式按部就班

 private void button1_Click(object sender, EventArgs e)
 {
     OpenFileDialog dialog = new OpenFileDialog();
     dialog.Multiselect = false;//该值确定是否可以选择多个文件
     dialog.Title = "请选择文件夹";
     dialog.Filter = "所有文件(*.*)|*.*";
     if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
     {
        // 1、读取图像、灰度化
         string file = dialog.FileName;
         Mat image = Cv2.ImRead(file, ImreadModes.Color);
         Mat src_gray = new Mat();
         Cv2.CvtColor(image, src_gray, ColorConversionCodes.BGR2GRAY); // 转换为灰度图像
 }

 二,高斯滤波

高斯模糊容易找到最大边界进行校正具体参数说明搜索一堆答案不在描述了

/// 
/// 2、高斯滤波
/// 
private void GaussianBlur()
{
    Cv2.GaussianBlur(src_img, dst, new OpenCvSharp.Size(gussX, gussY), gussPX, gussPY);   //高斯模糊
    pictureBox1.Image = dst.ToBitmap();
    pictureBox1.Refresh();
}

 三、二值化

二值化区分索要区域,便于边缘检测

/// 
/// 二值化
/// 
private void Threshold()
{
    if (cmBoxThre.Text == "")
    {
        return;
    }
    ThresholdTypes aaa = (ThresholdTypes)Enum.Parse(typeof(ThresholdTypes), cmBoxThre.Text);
    try
    {
        Cv2.Threshold(src_img, dst, tkBarThresh.Value, tkBarMaxValue.Value, aaa);//阈值二值化
        picBoxShowDel.Image = dst.ToBitmap();
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }

}

四、边缘检测 

 /// 
 /// 边缘检测Canny
 /// 
 private void Canny()
 {
     int hole = 0;
     if (!int.TryParse(txtBoxCannyHole.Text, out hole))
     {
         return;
     }
     try
     {
         Cv2.Canny(src_img, dst, tkBarCannyMin.Value, tkBarCannyMax.Value, hole, rbBtnTrue.Checked);  

         picBoxShowDel.Image = dst.ToBitmap();
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
 }

未完后续在补充~

你可能感兴趣的:(c#opencv,计算机视觉,人工智能)