我正在使用 OpenCV 开始一个项目,以准确检测斯诺克球(台球)的位置和轮廓。
这些是球:
我已经尝试了一些算法,但无济于事。这是我到目前为止所做的:
- HoughCircles:这几乎不起作用。即使将参数调整到毫米分辨率也只能检测到几个球,并且无法准确检测到球的中心。
- Canny:在这里,如果球彼此不靠近,我只能检索球的轮廓。
-按颜色 HSV 的阈值:因为球不是一种颜色,所以这是行不通的。
我想尝试其他算法,如 HaarCascadeDetection 或 SURF。
你们怎么看?
我正在使用 OpenCV 开始一个项目,以准确检测斯诺克球(台球)的位置和轮廓。
这些是球:
我已经尝试了一些算法,但无济于事。这是我到目前为止所做的:
- HoughCircles:这几乎不起作用。即使将参数调整到毫米分辨率也只能检测到几个球,并且无法准确检测到球的中心。
- Canny:在这里,如果球彼此不靠近,我只能检索球的轮廓。
-按颜色 HSV 的阈值:因为球不是一种颜色,所以这是行不通的。
我想尝试其他算法,如 HaarCascadeDetection 或 SURF。
你们怎么看?
我不是 100% 认为它会起作用,但试一试。我认为如果相机不动,您可以通过快速傅立叶变换来完成此操作。请查看http://en.wikipedia.org/wiki/Convolution_theorem。你应该做什么:
仅使用霍夫圆变换(在使用参数一段时间后)我得到了一些很好的结果。我想诀窍是结合使用足够小的 param2(以允许更多检测)和限制搜索半径(以过滤掉误报)。
circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,1,5,
param1=100,param2=10,minRadius=6,maxRadius=10)
我也删除了阴影,但我不确定你的情况是否需要它。这是一些测试结果。


我认为最好的选择是检查像素颜色是否在同一范围内 - 使用inrange函数(注意它需要 HSV 图像)。在这种情况下,球的中心可能只是一个光反射点(或非常接近该点的某个地方),通常是球的最亮点。
您也可以尝试扔掉表格(阈值或范围内),然后分析剩下的所有内容。