我目前正在做一个项目,我需要能够非常可靠地获得球在台球桌上的位置。
我使用表上的Kinect v2作为源。
初始图像如下所示(通过丢弃不在表级别的像素将其从16位转换为8位):

然后,i从当前图像中减去带空表的参考图像。
经过阈值和均衡之后,它看起来如下:图像

在单个图像上检测单个球是相当容易的,问题是我必须不断地用30 easy来完成它。
困难:
我的过程,哪种工作,但不够可靠:
问题是,一个球杆或手可以被检测为一个球,如果两个球接触,那么它可能会引起问题。也尝试了霍夫圈,但成功更少。(如果Kinect更接近,那么它就不能覆盖整个表)
任何线索都会很感激的。
发布于 2016-11-27 19:20:17
扩大上述评论:
我建议尽可能改进IRL设置。大多数情况下,确保可靠的设置比尝试“修复”用户的计算机视觉要容易得多,甚至在检测/跟踪任何东西之前。
我的建议是:
有了更可靠的设置,您应该能够根据深度来确定阈值。您可以可能的门槛到球的中心,因为下面的信息无论如何都是被屏蔽的。球不会变形,所以半径减小得很快,球可能会掉进口袋里。
一个你有一个清晰的阈值图像,你可以findContours()和minEnclosingCircle()。此外,您应该根据最小和最大半径值来扭曲结果,以避免视图中的其他对象(手、池提示等)。还可以查看瞬间()并确保阅读禤浩焯在OpenCV文章中的优秀球跟踪

它使用Python,但是您应该能够找到您使用的语言的OpenCV等效调用。
在跟踪方面,如果您使用OpenCV 2.4,您应该查看OpenCV 2.4的跟踪算法 (比如Lucas)。如果您已经使用了OpenCV 3.0,那么它有自己的贡献跟踪算法列表 (如TLD)。
我建议先从矩开始:首先使用最简单、计算成本最低的设置,在进入更复杂的算法之前先看看结果如何(这需要理解和正确获得参数才能得到预期的结果)。
https://stackoverflow.com/questions/40717587
复制相似问题