0

我正在使用 OpenCV 开始一个项目,以准确检测斯诺克球(台球)的位置和轮廓。

这些是球:绿色台球桌,三角形 15 个台球,外加 1 个白色母球

我已经尝试了一些算法,但无济于事。这是我到目前为止所做的:

- HoughCircles:这几乎不起作用。即使将参数调整到毫米分辨率也只能检测到几个球,并且无法准确检测到球的中心。

- Canny:在这里,如果球彼此不靠近,我只能检索球的轮廓。

-按颜色 HSV 的阈值:因为球不是一种颜色,所以这是行不通的。

我想尝试其他算法,如 HaarCascadeDetection 或 SURF。

你们怎么看?

4

3 回答 3

0

我不是 100% 认为它会起作用,但试一试。我认为如果相机不动,您可以通过快速傅立叶变换来完成此操作。请查看http://en.wikipedia.org/wiki/Convolution_theorem。你应该做什么:

  1. 我假设相机不动
  2. 创建一个与图片大小相同的圆圈图案图像
  3. 对图像和图片进行二维傅里叶变换
  4. 将谐波乘以谐波变换
  5. 进行逆变换
  6. 找到具有最高强度的点
于 2012-12-24T20:04:24.740 回答
0

仅使用霍夫圆变换(在使用参数一段时间后)我得到了一些很好的结果。我想诀窍是结合使用足够小的 param2(以允许更多检测)和限制搜索半径(以过滤掉误报)。

circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,1,5, 
            param1=100,param2=10,minRadius=6,maxRadius=10)

我也删除了阴影,但我不确定你的情况是否需要它。这是一些测试结果。

在此处输入图像描述

在此处输入图像描述

于 2014-05-27T02:08:38.323 回答
0

我认为最好的选择是检查像素颜色是否在同一范围内 - 使用inrange函数(注意它需要 HSV 图像)。在这种情况下,球的中心可能只是一个光反射点(或非常接近该点的某个地方),通常是球的最亮点。

您也可以尝试扔掉表格(阈值或范围内),然后分析剩下的所有内容。

于 2012-12-25T00:13:45.697 回答