繁体   English   中英

将sobel滤波器应用于emgucv中的边缘检测

[英]Apply sobel filter for edge detection in emgucv

我正在尝试在图片上应用Sobel滤镜以检测边缘,如下所示:

Image<Gray, Byte> imgProcessed1;
private void Form1_Load(object sender, EventArgs e)
{



    Image<Bgr, Byte> imgProcessed=new Image<Bgr, byte>(@"C:\Users\Public\Pictures\Sample Pictures\1.jpg");

    imgProcessed1 = imgProcessed.Convert<Gray, byte>();
    Image<Gray, Single> img_final = (imgProcessed1.Sobel(1, 0, 5));
    pictureBox1.Image = img_final.ToBitmap();
}

但是结果是非常不寻常的,我在opencv中是如此陌生。

我的输出

在此处输入图片说明

我需要这个结果。

在此处输入图片说明

我只需要应用此过滤器

在此处输入图片说明

谢谢所有我的朋友,我终于找到了解决方案:

Image<Gray, byte> gray = new Image<Gray, byte>(@"C:\Users\Public\Pictures\Sample Pictures\1.jpg");
            Image<Gray, float> sobel = gray.Sobel(0, 1, 3).Add(gray.Sobel(1, 0, 3)).AbsDiff(new Gray(0.0));
            pictureBox1.Image = sobel.ToBitmap();

根据opencv文档:

http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/sobel_derivatives/sobel_derivatives.html

您应该通过以下方式使用sobel运算符:

Sobel( src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT );

该函数采用以下参数:

  1. src_gray:在我们的示例中为输入图像。 这是CV_8U
  2. grad_x / grad_y:输出图像。
  3. ddepth:输出图像的深度。 我们将其设置为CV_16S以避免溢出。
  4. x_order:导数在x方向上的顺序。
  5. y_order:导数在y方向上的顺序。
  6. scale,delta和BORDER_DEFAULT:我们使用默认值。

希望它支持您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM