JinsnHS 2023-04-08 22:47 采纳率: 58.3%
浏览 85
已结题

如何使用OpenCV排除被遮挡的图形?

问题详解

我是准备参加比赛的学生,这个比赛会使用到 OpenCV 这样的库做来识别处理,我学习 OpenCV 的基础操作已经有一个多月了,目前遇到了一个非常棘手的问题:我会使用 OpenCV 来识别多边形,这种多边形有随机的五种类型及七种颜色,目前我已经把颜色和形状统计的问题解决了,但是被遮挡的图形却不知道怎么排除,具体内容在第二个栏目。

我尝试了什么?

我尝试使用安卓版本的 OpenCV 来解决多边形识别的问题,目前使用的办法是利用 inRange() 方法获得二值图,接着使用 findContours() 方法寻找轮廓,得到轮廓后进行开闭预算,紧接着使用 approxPolyDP() 方法进行多边形逼近,最后使用 convexHull() 方法检测角点来判断多边形是什么类型。这样能识别简单的多边形,但是这样也会识别被前景覆盖掉的多边形,被覆盖的多边形是无效的(应该被排除),请问我应该怎么做才能排除这些被覆盖的多边形?

示例图片

img

请问有人可以帮助我吗?非常感谢!请结合上面的图片解决问题,不要用chatGPT敷衍我,要是能做出来,酬金追加到100元。

  • 写回答

6条回答 默认 最新

  • youcans_ 人工智能领域优质创作者 2023-04-10 23:31
    关注

    分析如下思路:
    (1)掩模图像,InRange 颜色分割,这样就消除了背景,提取到 指定颜色的图形。
    (2)大致来说,再对每个颜色 InRange 分割得到的二值图像,提取轮廓可以获得边缘,还可以在该图上进行霍夫线检测和圆检测。
    接下来就是 图形遮挡问题。
    (1)虽然问题条件没有明确,但从图中看没有 三层遮挡情况,也就是可以简化为 二层遮挡问题。具体来说,一个图形,可以被多个其它图像遮挡;但是一个像素上最多叠放了2个图像,没有一个像素上重叠了3个或以上的图形。
    (2)提取的遮挡图案的上层图形不需要分析,直接通过 InRange 分割可以求出。
    (3)提取到的遮挡图案的下层图形是在原始图案基础上,被一个或多个遮挡图案切除了局部。
    (4)如果是(被切除局部的)三角形/矩形/菱形/五角星的二值轮廓图像,可以对该轮廓依次做:
    1)最小外接圆,cv.minEnclosingCircle,检出圆形。如果原图形是圆形,则外接圆与遮挡轮廓有一定重合(设个阈值判断);如果原图形不是圆形,则外接圆与轮廓基本不重合。
    2)最小外接三角形,cv.minEnclosingTriangle,检出三角形。原理同上。
    3)轮廓的最小矩形边界框,cv.minAreaRect,检出正方形。原理同上。
    4)最后剩下 菱形和五角星,可以用轮廓的凸壳判断,cv.convexHull。如果原图形是菱形,则凸壳与遮挡轮廓有一定重合,而五角星的凸壳与遮挡轮廓没有重合。
    这样大致就可以解决了。
    但是,仍然只能说大致解决。为什么呢?因为如果菱形矩形被遮挡1/2以上,只剩下两条边,其实是无法判断原始图形是菱形矩形还是三角形的。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月10日
  • 修改了问题 4月9日
  • 修改了问题 4月8日
  • 创建了问题 4月8日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂