如何检测填充圆圈的网格?
Posted
技术标签:
【中文标题】如何检测填充圆圈的网格?【英文标题】:How can I detect a grid of filled circles? 【发布时间】:2016-05-21 02:42:09 【问题描述】:给定一个连接 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)
我加了非极大值抑制,但是效果不是很好。
有没有比直接处理霍夫圆更好的方法,也许有某种我不知道的填充循环形态学操作。
这是一个示例输入图像:
您可以假设输入图像已被裁剪并且具有与上述类似的边距(我有另一段代码可以处理此问题)。
【问题讨论】:
圆圈,为什么一定是圆圈?分割红色/黄色斑点并使用它们的质心可能更简单。 看看cv2.inRange
,例如here,您可以轻松地分割红色和黄色(最后是蓝色),首先将您的图像转换为 HSV。
我也会推荐 HSV 颜色空间以及分割或轮廓检测等。
【参考方案1】:
如果 Hough 不是必需的,我建议按照此处所述实施光线投射算法:https://en.wikipedia.org/wiki/Point_in_polygon
一般步骤是:
-
为红色圆圈创建蒙版
在间隔为
y
的x
列上运行光线投射以确定红色的# 和位置
对黄色重复第 1 步和第 2 步
由于您使用的是 RGB,颜色对比度应该足以为您提供良好的效果。
【讨论】:
【参考方案2】:假设您的网格将保持其位置,最简单的方法是为每个插槽设置一个固定的感兴趣区域,并在每次更改时测量它们的色调值。
【讨论】:
以上是关于如何检测填充圆圈的网格?的主要内容,如果未能解决你的问题,请参考以下文章