使用两个网络摄像头进行3D物体跟踪

4
我正在我的手肘上使用乒乓球。我可以使用Python中的OpenCV跟踪它并提取每个帧中的x和y,但问题是:我还需要z。因此,我在冠状平面上添加了第二个相机。
如果您不熟悉,请参考以下图片:

enter image description here

我的第一个摄像头是在矢状面上。我不知道如何进行同步。有什么建议吗?


如果您可以从一个摄像头获取x和y坐标,则可以从另一个摄像头获取y和z坐标。摆脱多余的y,然后您就得到了x、y和z坐标。 - MeetTitan
问题在于 y、z 中的 y 与 x 中的 y 不同步,我不知道如何校准。 - user4312643
如果它们在同一台计算机上,你应该使用两个线程同时提取帧。 - Azad
或者先使用 grab 捕获两个摄像头,然后再使用 retrieve,但仍会有轻微的延迟。 - Azad
1个回答

3
几种解决方案:
  • 将您的网络摄像头放置在两个垂直平面上(您所做的),并手动测量它们之间的距离(x,y,0)。

然后,您的第一个网络摄像头位于(0,0,0),第二个网络摄像头位于(例如15,16,0)。从那里,您可以轻松推导出图像之间的转换,参见此wiki

这是90度旋转+平移,因此如果您的旋转沿z轴,则转换矩阵将为:

0    1   15
-1 0 16
0 0 1

或者

0    -1   15
1 0 16
0 0 1

取决于旋转是否为+或-90度。如果您有疑问,请查看您的数据。

  • 另一种解决方案:定位您的两个网络摄像头,然后在拍摄区域中放置参考点(4个应该足够好,定义笛卡尔坐标系),并决定它们将定义您的参考框架。然后,您将转换来自两个网络摄像头的输入,以获取它们相对于该框架的坐标。我想您可以通过使用我给您提供的链接中的某些数学,并在OpenCV中检查您的结果来实现这一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接