使用 OpenCV (Canny) 进行边缘检测

Posted

技术标签:

【中文标题】使用 OpenCV (Canny) 进行边缘检测【英文标题】:Edge detection using OpenCV (Canny) 【发布时间】:2014-06-12 00:45:37 【问题描述】:

我正在尝试使用 OpenCV 检测矩形。然而,有时这在运行 Canny 方法后变得相当困难,因为通常会擦除两个边缘。在应用 Canny 之前,我尝试了许多不同的阈值集并将其模糊化,但我还没有取得重大的积极成果。目前,我没有模糊图像,所以这就是我正在做的事情:

Mat imgSource = Highgui.imread(filepath);
Imgproc.Canny(imgSource, imgSource, 300, 600, 5, true); 

例子:

original http://imagizer.imageshack.us/a/img822/8776/27i9j.jpg Canny http://imagizer.imageshack.us/a/img841/9868/wkc95.jpg

然后,我正在尝试 OpenCV 的 findContours 方法来检测矩形,它有 80% 的时间有效,我该如何改进它?

【问题讨论】:

作为起点,尝试做 cvtColor(imgSource, imgSource,CV_BGR2GRAY);阈值(imgSource,imgSource,25,255,THRESH_BINARY);然后findContours 这里是一个使用 JavaCPP 的例子。 docs.leponceau.org/java-examples/java-evaluation/… 【参考方案1】:

尝试使用不同的阈值,在这种情况下,使用较低的阈值(例如 10,100)会获得更好的结果。

blur(src,src,Size(3,3));
cvtColor(src,tmp,CV_BGR2GRAY);
Canny( src, thr, 10, 100, 3 );

或者以另一种方式,您将通过应用threshold 获得轮廓图像 喜欢,

threshold(tmp,thr,50,255,THRESH_BINARY_INV);

【讨论】:

【参考方案2】:

这里的问题可能是图像压缩 JPEG 文件类型。 尝试将图像转换为单色,因为您只有黑白图像 并编辑阈值。 这应该消除线条边缘周围的噪音。 那么 canny 可以应用于任何值。

【讨论】:

以上是关于使用 OpenCV (Canny) 进行边缘检测的主要内容,如果未能解决你的问题,请参考以下文章

opencv 检测图像边缘 Canny算法应用

边缘检测后获取边缘坐标(Canny)

利用OpenCV进行边缘检测

python-opencv-Canny边缘检测

Canny边缘检测算法(python 实现)

使用Python,OpenCV和深度学习进行全面嵌套边缘检测