使用 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) 进行边缘检测的主要内容,如果未能解决你的问题,请参考以下文章