改进Opencv HoughLinesP中的直线提取
我正在使用HoughLinesP从灰度图像中提取线条 下面是我的psudo代码改进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); 正如在缩放图像中可以看到的,单条边,即图像中的一条直线返
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,但效果没有改善。在做精明之前,我会先尝试模糊。