c++ - 如何 "crop"Canny边缘检测器的结果

标签 c++ opencv image-processing

我运行了 canny 函数,结果如下所示:

canny Result

我想研究这两个区域的“线”,所以我想裁剪它们:像

what I want to do

顺便说一句,“线”可以在不同的位置:比如 3rd

我不是要代码,而是要我如何做的想法 提前致谢 !

最佳答案

缩小边缘图像并对其进行模糊处理,使边缘像素大致形成两条连续的细线。
(您可能希望对原始图像而不是精巧的边缘图像进行这种缩放和模糊处理,检查哪种效果最好):

enter image description here

然后使用 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/

相关文章:

python - 使用OpenCV比较图像

android - 如何检测手机摄像头前的手势识别

c++ - 我应该将 RAII 应用于我分配的所有数组吗?

python - 在 Python 中训练 OpenCV NormalBayesClassifier

android - 用于 ANDROID 图像比较的 OpenCV

opencv - cv::RotatedRect 中的非零像素数

c++ - 如何创建这个桌面录音机?

c++ - 如何在 C++03 中用 sprintf 正确替换 sprintf_s?

Windows 上的 iPhone 应用程序开发

c++ - 拆分后 boost spirit x3 的奇怪语义行为