使用OpenCV查找图像中矩形的位置
computer-vision
image-processing
opencv
5
0

我正在尝试使用OpenCV从iPhone游戏Blocked中 “解析”屏幕截图。屏幕截图被裁剪为如下所示:

萤幕撷取画面已封锁

我想现在,我只是想查找组成每个矩形的4个点中每个点的坐标。我确实看到了OpenCV附带的示例文件squares.c,但是当我在这张图片上运行该算法时,它带有72个矩形,其中包括空白的矩形区域,我显然不想将其算作我的一个矩形。有什么更好的方法来解决这个问题?我尝试进行一些Google研究,但对于所有搜索结果,几乎没有可用的相关信息。

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

已经讨论过类似的问题: 如何识别此图像中的矩形?

至于您的数据,您要查找的矩形是唯一的黑色对象。因此,您可以尝试进行阈值二值化:黑色像素是所有三个RGB值均小于40的像素(我已经凭经验找到了它)。这个简单的操作使您的图片看起来像这样:

二值化图片

之后,您可以应用霍夫变换来查找线(在我所涉及的主题中进行了讨论),或者您可以更轻松地进行。计算黑色像素在X和Y轴上的积分投影。 (对X的投影是x_i的矢量-黑色像素的数量,因此它的第一个坐标等于x_i)。因此,您可能获得x和y值作为投影的峰值。然后查看受找到的x和y限制的所有可能的分段(如果在(x_i,y_j)和(x_i,y_k)之间有很多黑色像素,则可能会有一条线)。最后,将线段组成矩形!

收藏
评论

由于您的问题是小矩形,因此我将首先删除它们。由于这些线比矩形的边界细得多,因此我将从对图像进行形态学运算开始。

使用如下所示的结构元素:

 element = [ 1 1
             1 1 ]

应该删除宽度小于两个像素的行。删除细线后,OpenCV的矩形查找算法很可能会为您完成其余的工作。腐蚀可以在OpenCV中通过函数cvErode

收藏
评论

我只是以我原来的方法为基础,然后按照罗伯特(Robert)在对我的问题的评论中的建议做事。获得矩形列表后,我将遍历并计算每个矩形的平均颜色。我检查平均颜色的红色,绿色和蓝色分量是否分别在灰色和蓝色矩形颜色的10%以内,如果是,则保存矩形;如果不保存,则将其丢弃。这个过程给我这样的东西:

屏幕截图

由此,获取所需信息(将游戏窗口视为6x6网格的方向,起点和每个矩形的长度)变得微不足道。

收藏
评论

块看起来像位图-为什么不对每个块大小/颜色/方向使用简单的模板和不同的模板进行匹配?

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号