gpt4 book ai didi

c++ - opencv:在矩形检测中使用轮廓和霍夫变换

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:44 26 4
gpt4 key购买 nike

我正在尝试使用不同的方法检测灰度图像中的白色矩形:轮廓检测和霍夫变换。不幸的是,我正在处理的图像有一些限制,即

  1. 图像中有很多特征,矩形不是唯一的特征
  2. 矩形可以合并到其他特征(例如,其中一个矩形边缘可以与一条长直线重叠)
  3. 矩形可以包含一些其他特征(例如矩形内的字母、数字或一些 Logo )
  4. 有一些特征看起来像矩形(例如字符'D'看起来像一个矩形,右上角和右下角有小圆弧;另一个例子是梯形而不是平行四边形)
  5. 矩形可以顺时针和逆时针旋转0到15度
  6. 在不同的光照条件下(例如 1 像素间隙),这些线可能会分成几条线,因此过滤线的最小线长必须很小(例如,在霍夫变换中)
  7. 当最小线长设置为较小的值时,更容易看到同一行在不同方向的重复行(即需要合并多条线)

对于轮廓方法,一些图像的轮廓被破坏了。此外,图像可能包含矩形等特征(例如字符“D”)。我不确定这是否是一个好方法。

我看到很多文章/论坛建议使用 Hough 变换来检测矩形,如下面的帖子。不幸的是,我必须设置最小行长度的小值并且看到了重复的行。我不知道如何处理上面提到的点(例如,合并所有重复的线并为每条边只选择一条线,如何区分大部分是线但带有像“D”这样的小弧的特征,以及如何用一条边与一条长直线等合并来隔离正方形)。

Hough transformation vs Contour detection for Rectangle recognition with perspective projection

欢迎提出任何建议!

编辑:添加一些图片

Character D

字符 D

Rect edge merged with long straight line

带logo的矩形,边缘与长直线合并

enter image description here

梯形(顶部阴影形成底部梯形)

最佳答案

我建议您尝试使用 binary threshold (自适应或其他方式)在每个图像上,这将为您的轮廓检测提供一些清晰的线条。您也可以erode/dilate去除噪声的图像(例如第二张图像中的细线)

然后使用轮廓检测​​,对轮廓进行计数,找到图像中具有四个边的最大对象(这可能是您的对象)。

在使用二进制/侵 eclipse 之前制作图像的拷贝,以便一旦从轮廓检测中获得感兴趣的区域,就可以将拷贝图像裁剪到该区域。

抱歉,示例链接是用 Python 编写的,但我相信一旦您理解了这个想法,将它移植到 C++ 将很​​容易。

希望这对您有所帮助。

编辑

我自己尝试了上述方法,对每张图像进行阈值化、轮廓检测,然后在最大的一组轮廓周围绘制边界框。

结果如下:

enter image description here

最大轮廓集周围的边界框

enter image description here

相同,绘制在原始图像上

enter image description here

关于c++ - opencv:在矩形检测中使用轮廓和霍夫变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30082431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com