我试图使用不同的方法检测灰度图像中的白色矩形:轮廓检测和Hough变换。不幸的是,我正在处理的图像有一些限制,即
对于contonours方法,一些图像的轮廓被打破。此外,图像可以包含诸如矩形之类的特征(例如字符“D”)。我不确定这是不是一个好方法。
我见过许多文章/论坛建议使用Hough变换检测矩形,如下面的帖子。不幸的是,我必须设置最小行长度的小值,并看到重复的行。我不知道如何处理上面提到的要点(例如,组合所有重复的行并为每个边选择一行,如何区分大多数部分的特征是线但是像'D'那样的小弧,以及如何隔离正方形,其中一条边与一条长直线合并,等等。)
Hough transformation vs Contour detection for Rectangle recognition with perspective projection
欢迎任何建议!
编辑:添加一些图片
角色D
带徽标的矩形和边缘与长直线合并
梯形(顶部有阴影,底部形成梯形)
答案 0 :(得分:1)
我建议您尝试在每个图像上使用binary threshold(自适应或其他),这将为您的轮廓检测提供一些清晰的线条。您还可以erode/dilate图像去除噪点(例如第二张图片中的细线)
然后使用轮廓检测,并计算轮廓,找到图像中具有四个边的最大物体(这可能是您的对象)。
在使用二进制/侵蚀之前复制图像,这样一旦从轮廓检测中获得了感兴趣的区域,就可以将复制图像裁剪到该区域。
道歉示例链接是用python编写的,但我相信一旦你明白了,将它移植到C ++就很容易了。
希望这有帮助。
修改强>
我自己通过对每个图像进行阈值处理,轮廓检测,然后围绕最大的轮廓线绘制一个边界框来尝试上述方法。
下面看到结果:
围绕最大轮廓线的边界框
同样,绘制在原始图像上