opencv - 预测球的碰撞

时间:2017-07-21 12:16:42

标签: c++ opencv collision-detection

我想做一个项目,包括使用opencv,网络摄像头和C ++编程语言检测池球可能的碰撞。现在我只想预测迷你桌上2个球的碰撞。我通过将rgb更改为hsv来检测它们然后使用阈值,将来我可能会使用另一种方法来检测随机数量的球,但现在它并不那么重要。

所以,现在我可以检测到两个球,我知道它们的位置,半径,现在我正在思考如何预测它们之间是否会发生碰撞,如果我们假设它们会直接移动的话线。我认为我应该检查他们在每一帧更新中的位置(我必须知道我的摄像头中的帧之间的时间),并且由此,我将能够确定速度,加速度和球的方向的值。所以,如果我知道两个球的那些参数,我将能够确定它们在哪里发生碰撞,然后,使用参数均衡,我将能够检查它们是否同时在碰撞点上。

我想知道这是否是解决问题的正确方法,也许有一种更简单,更有效的方法可以做到这一点?

感谢您提供任何帮助。

的Karol

1 个答案:

答案 0 :(得分:0)

这听起来好像你正在进行一个好的项目......

从我简要阅读here开始计算加速度似乎相当困难。因此,作为一个初步步骤,您可以假设一个恒定的速度。因此,将球位置最后一帧和当前帧之间的差异作为矢量,并将其添加到当前帧位置,以找到下一帧的位置。对两个球执行此操作将允许您检查碰撞。

你可以通过比较使用毕达哥拉斯的球中心之间的距离与它们的半径之和来检查碰撞。如果它们的半径之和大于它们中心之间的距离,则会发生碰撞。

显然,前方计算一帧并不是很有用,但如果你假设一个恒定的速度或设法计算它们的加速度,那么没有理由为什么你将来不能计算30或100帧。方法

我最近在javascript中进行了一个台球模拟,你可以快速查看here,如果你想看看它是如何工作的。