如何检测实心圆网格?

问题描述 投票:0回答:2

给定 connect-4 板的图像,我想识别并输出板的状态(6 x 7 矩阵)。我尝试的第一种方法是找到圆圈,然后在其质心中寻找网格图案。

这是我正在使用的 open-cv 函数:

circles = cv2.HoughCircles(bw_im,
                               cv2.cv.CV_HOUGH_GRADIENT,
                               dp=DP,
                               minDist=MIN_DIST,
                               minRadius=MIN_RADIUS,
                               maxRadius=MAX_RADIUS)

我添加了非极大值抑制,但是效果不是很好。

有没有比直接处理霍夫圆更好的方法,也许有某种我不知道的填充循环形态学操作。

这是一个输入图像示例:

enter image description here

您可以假设输入图像已被裁剪并且具有与上面类似的边距(我有另一段代码可以处理此问题)。

python opencv machine-learning computer-vision
2个回答
0
投票

如果霍夫不是必需的,我建议实现如下所述的光线投射算法:https://en.wikipedia.org/wiki/Point_in_polygon

一般步骤是:

  1. 为红色圆圈创建蒙版
  2. 在间隔
    x
    y
    列上运行光线投射,以确定红色的 # 和位置
  3. 对于黄色重复步骤 1 和 2

由于您使用的是 RGB,因此颜色对比度应该足以给您带来良好的结果。


0
投票

假设你的网格将保持其位置,最简单的方法是为每个插槽设置一个固定的感兴趣区域,并在每次更改某些内容时测量它们的色调值。

© www.soinside.com 2019 - 2024. All rights reserved.