Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
改进Opencv HoughLinesP中的直线提取_Opencv_Image Processing_Grayscale_Hough Transform - Fatal编程技术网

改进Opencv HoughLinesP中的直线提取

改进Opencv HoughLinesP中的直线提取,opencv,image-processing,grayscale,hough-transform,Opencv,Image Processing,Grayscale,Hough Transform,我正在使用HoughLinesP从灰度图像中提取线条 下面是我的psudo代码 threshold(img_tmp,bin_img,30,255,cv::THRESH_BINARY); Canny(bin_img, canny_img, 50, 255, 3); vector<Vec4i> tmp_lines; HoughLinesP(canny_img,tmp_lines, 1, CV_PI/360,10, 10, 1); 正如在缩放图像中可以看到的,单条边,即图像中的一条直线返

我正在使用HoughLinesP从灰度图像中提取线条

下面是我的psudo代码

threshold(img_tmp,bin_img,30,255,cv::THRESH_BINARY);
Canny(bin_img, canny_img, 50, 255, 3);
vector<Vec4i> tmp_lines;
HoughLinesP(canny_img,tmp_lines, 1, CV_PI/360,10, 10, 1);
正如在缩放图像中可以看到的,单条边,即图像中的一条直线返回多条直线。16,22和0,28以及10,11和23,18,24线对应于单线

我怎样才能得到单边缘的单行线,有什么建议吗

输入图像:

提取线

发行


谢谢。

再说一遍,canny或任何边缘检测算法都不适合这种输入,因为线条基本上都是边缘。尝试在输入后的Hough线上应用某种非最大值抑制,而不进行任何类型的边缘检测。

问题在于您使用的是canny边缘检测器,它可以在每条线的两侧找到边缘。它可以很好地处理自然图像并找到两个对象/零件之间的边界,但它非常适合您的输入类型。我会尝试对图像进行阈值分割,使用形态学对其进行一点清理,反转使边界为白色,然后将其发送给Hough进行清理。我尝试了膨胀和腐蚀,但结果是一样的。你运行canny吗?主要问题是不运行任何类型的边缘检测或梯度操作。你可以使用一个像Canny一样的非最大值抑制来进行清理。在清理之前,你必须稍微模糊图像。我尝试了阈值->腐蚀->膨胀->Canny->hough,但效果没有改善。在做精明之前,我会先尝试模糊。