我正在尝试使用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%的时间内工作,我该如何改进呢?
答案 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可以应用任何值。