如何检测实心圆圈网格?

时间:2016-02-10 16:18:37

标签: python opencv machine-learning computer-vision vision

给定一个connect-4板的图像,我想识别并输出电路板的状态(6乘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

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

2 个答案:

答案 0 :(得分:0)

如果霍夫不是一个要求,我建议实施如下所述的光线投射算法:https://en.wikipedia.org/wiki/Point_in_polygon

一般步骤如下:

  1. 为红色圆圈创建遮罩
  2. 在间隔x的{​​{1}}列上运行光线投射以确定红色的#和位置
  3. 重复步骤1& 2为黄色
  4. 由于您正在使用RGB,因此色彩对比度应足以为您提供良好的效果。

答案 1 :(得分:0)

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