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

时间:2014-06-12 00:45:37

标签: java android opencv

我正在尝试使用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%的时间内工作,我该如何改进呢?

2 个答案:

答案 0 :(得分:7)

尝试使用不同的阈值,在这种情况下,当使用较低的阈值(如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);

答案 1 :(得分:2)

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

相关问题