我正在使用OpenCV开始一个项目,以准确地检测斯诺克球(台球)的位置和轮廓。
这些是球:
我已经尝试了一些算法无济于事。这是我到目前为止所做的:
- HoughCircles :这几乎无效。即使将参数调整到毫米分辨率,也只会检测到几个球,并且不能准确检测到球的中心。
- Canny :如果球彼此不接近,我只能检索球的轮廓。
- 颜色阈值HSV :因为球不是一种颜色,所以这不起作用。
我想尝试其他算法,如HaarCascadeDetection或SURF。
你们的想法是什么?
答案 0 :(得分:0)
我不是百分之百,它会起作用,但试一试。我认为如果相机不移动,你可以通过快速傅里叶变换来实现这一点。请看http://en.wikipedia.org/wiki/Convolution_theorem。你应该做什么:
答案 1 :(得分:0)
我认为最好的选择是检查像素颜色是否在同一范围内 - 使用inrange功能(注意它需要HSV图像)。在这种情况下球的中心可能只是一个光反射点(或非常接近这一点的某个地方),这通常是球的最亮点。
您也可以尝试丢弃表格(阈值或范围),然后分析剩下的所有内容。
答案 2 :(得分:0)
我使用霍夫圆转换(在使用参数一段时间后)获得了一些好的结果。我想这个技巧是使用足够小的param2(允许更多检测)和限制搜索半径(过滤掉误报)的组合。
circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,1,5,
param1=100,param2=10,minRadius=6,maxRadius=10)
我也移除了阴影,但我不确定你的情况是否需要它。 这是一些测试结果。