首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在opencv中检测非闭合轮廓

在opencv中检测非闭合轮廓
EN

Stack Overflow用户
提问于 2014-08-05 15:43:07
回答 1查看 6.4K关注 0票数 6

我在做自动卡片检测的计算机视觉项目。我要把卡片和背景分开。我应用了精明的边缘检测,使用了自动参数设置。

opencv中Canny操作低阈值和高阈值的自动计算

结果很好。然而,有时候精明的人并不是这样完美。

我已经用cvFindContour来检测这个盒子。然而,由于上面的“洞”,opencv未能检测到轮廓。

如何调整cvFindContour以检测轮廓,还是应该调整精明的边缘?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-05 17:55:22

有多种可能的解决方案。

最简单的办法可能是:

  • 如果FindContours没有找到封闭的轮廓,则使用略微降低的low_threshold重复canny过滤器,直到找到闭合的轮廓为止。如果闭合的轮廓有大致正确的大小和形状,它是一张卡片。哈利斯联系的答案解释了如何检查轮廓是否关闭。

另一个相当简单的解决方案是:

  • 不要把Canny应用在图像上。在otsu阈值图像上执行findContours。可选择地在阈值图像上使用形态学开闭来去除findContours前的噪声。

FindContours不需要边缘图像,它通常用阈值图像执行。我不知道你的源图像,所以我不能说这会有多好,但你肯定会避免洞的形状问题。

如果源映像不允许这样做,那么以下内容可能会有所帮助:

  • 使用分水岭将卡片与背景分开。使用一个高阈值来获取一些绝对是前景的种子像素,并使用一个低阈值来获取确定为背景的像素,然后使用cv:watershed()生长这两个种子。

如果该图像中的背景与卡片的颜色相同,则前两种方法可能工作得不太好。在这种情况下,您最好的选择可能是Micka建议的解决方案:

  • 使用hough变换查找图像中最突出的4条线。用这4行形成一个矩形。
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25142987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档