如何检测一个填充圆的网格?

3

给定一个连接四棋盘的图像,我想识别并输出棋盘的状态(一个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)

我加入了非极大值抑制,但结果并不理想。
是否有比直接处理Hough圆更好的方法?也许有某种我不知道的“填充圆度”形态学操作。
这是一个示例输入图像:

enter image description here

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

3
为什么非得是圆形呢?分割出红色/黄色斑块并使用它们的质心可能更简单。 - MB-F
1
看一下cv2.inRange,例如这里,你可以先将图像转换为HSV格式,然后轻松地分割红色和黄色(以及最终的蓝色)。 - Miki
我建议使用HSV颜色空间,然后进行分割或轮廓检测等操作。 - Micka
2个回答

0

如果Hough不是必需的,我建议按照这里描述的射线投射算法实现:https://en.wikipedia.org/wiki/Point_in_polygon

一般步骤如下:

  1. 为红色圆圈创建掩码
  2. 在间隔为yx列上运行射线投射以确定红色的数量和位置
  3. 重复步骤1和2以获取黄色

由于您正在使用RGB,颜色对比应该足以给您良好的结果。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接