Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用两个非静态摄像机估计相对于固定点的三维对象位置_Python_Opencv_Image Processing_Computer Vision_Triangulation - Fatal编程技术网

Python 使用两个非静态摄像机估计相对于固定点的三维对象位置

Python 使用两个非静态摄像机估计相对于固定点的三维对象位置,python,opencv,image-processing,computer-vision,triangulation,Python,Opencv,Image Processing,Computer Vision,Triangulation,我正试图借助两个非静态摄像机(见附图)在3D中估计物体(标记M)的运动。除了移动标记M,场景中还有4个静态共面标记(m1、m2、m3和m4)。静态标记之间的绝对距离(以厘米为单位)是已知的 这两个摄像头可以四处移动,但相对固定。摄影机同时拍摄场景的图像。我可以从两个摄像头检测2D图像中的所有标记(静态和移动) 目标是计算M在3D中跨帧的运动。一种方法是假设m1是世界坐标系的原点(0,0,0),然后在两帧之间找到M(x,y,z)的三维位置,然后找到这两个位置之间的距离 因此,该问题解决为跨帧计算

我正试图借助两个非静态摄像机(见附图)在3D中估计物体(标记M)的运动。除了移动标记M,场景中还有4个静态共面标记(m1、m2、m3和m4)。静态标记之间的绝对距离(以厘米为单位)是已知的

这两个摄像头可以四处移动,但相对固定。摄影机同时拍摄场景的图像。我可以从两个摄像头检测2D图像中的所有标记(静态和移动)

目标是计算M在3D中跨帧的运动。一种方法是假设m1是世界坐标系的原点(0,0,0),然后在两帧之间找到M(x,y,z)的三维位置,然后找到这两个位置之间的距离

因此,该问题解决为跨帧计算3D中M wrt到m1的位置。这意味着,自我运动(由相机引起的运动)在帧之间不会对M的位置产生影响,因为它是相对于m1的,m1是原点


我希望有人能指导我使用OpenCV解决这个问题的正确方向。

我将尝试以下方法:

  • 估计两个摄像机的姿势。由于您拥有标记的图像位置及其三维位置,因此可以使用PnP进行此操作
  • 使用估计的摄像机位置对M的位置进行三角测量
  • 坐标系将由标记的3d位置决定,因此m1将是您的原点

    这就要求

  • 每个摄影机图像中至少有三个标记可见
  • M在两个相机图像中都可见
  • 你的相机已经校准了

  • 您应该能够找到执行上述两个步骤的OpenCV函数。

    您有真实图像的代码和示例吗?感谢您的详细回复。我只是想澄清一件事。三角剖分后M的坐标是世界坐标系吗?或者我需要分别取旋转矩阵和平移矩阵的逆矩阵和负矩阵@Hannes Ovrent三角测量后M的坐标系取决于摄像机的坐标系。由于使用三维世界坐标获得摄影机姿势,因此它们将自动位于世界坐标系中。