我运行了 canny 函数,结果如下所示:
我想研究这两个区域的“线”,所以我想裁剪它们:像
顺便说一句,“线”可以在不同的位置:比如
我不是要代码,而是要我如何做的想法 提前致谢 !
最佳答案
缩小边缘图像并对其进行模糊处理,使边缘像素大致形成两条连续的细线。
(您可能希望对原始图像而不是精巧的边缘图像进行这种缩放和模糊处理,检查哪种效果最好):
然后使用 hough transform 检测那些行
如果您的霍夫变换报告每条实线有多个匹配项,您可以过滤掉靠近的匹配项,或者进一步缩小图像,或者降低霍夫变换的分辨率参数
一旦你有了线,删除每一个像素到线的距离 > epsilon
备选建议:
Morphological closing :将边缘图像扩大几次,使边缘像素形成一个连续的 Blob 。侵 eclipse 图像几次。
Detect the contours这个 blob 与 cv::findcontours.
使用 cv::approxPolyDP 简化轮廓。
如果你只想要两条线的边界轮廓,你就完成了。否则遍历每个轮廓段,找到两个长段之间的直角转弯,找到分割轮廓的位置,如果你想分开线。
关于c++ - 如何 "crop"Canny边缘检测器的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20329395/