给定 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)
我添加了非极大值抑制,但是效果不是很好。
有没有比直接处理霍夫圆更好的方法,也许有某种我不知道的填充循环形态学操作。
这是一个输入图像示例:
您可以假设输入图像已被裁剪并且具有与上面类似的边距(我有另一段代码可以处理此问题)。
如果霍夫不是必需的,我建议实现如下所述的光线投射算法:https://en.wikipedia.org/wiki/Point_in_polygon
一般步骤是:
x
的 y
列上运行光线投射,以确定红色的 # 和位置由于您使用的是 RGB,因此颜色对比度应该足以给您带来良好的结果。
假设你的网格将保持其位置,最简单的方法是为每个插槽设置一个固定的感兴趣区域,并在每次更改某些内容时测量它们的色调值。