OpenCV triangulatePoints - 提供它的正确坐标是什么?

时间:2015-08-24 10:07:56

标签: c++ opencv triangulation

以前,我正在使用另一种方法来确定两个2D图像的3D位置。对于那种(平庸)方法,我必须在图像的中心获得具有原点的2D坐标。因此,我得到了很多负面价值。 OpenCV通常使用let bottom corner作为坐标原点(根本没有负值)

应用程序用户应该可以使用任何一种方法。我可以继续采用这种方式收集2D坐标,还是必须更改它?如果没有,我是否必须使用图像的新中心点(cv::stereoCalibrate的结果)而不是默认值(frame.cols/2,frame.rows / 2)?

1 个答案:

答案 0 :(得分:0)

使用OpenCV的triangulatePoints时,需要传递参数:

  • projectionMatrixA - 隐含地包含内在相机参数(焦距& 主点偏移,这是从左侧和顶部的像素偏移,应被视为0,0)
  • projectionMatrixB - 除了固有的相机参数外,投影矩阵还反映了相机相对于某些坐标系的位置。因此,如果您有两个相同的相机,两个投影矩阵仍然会有所不同,因为它们的位置不同。
  • 使用projectionMatrixA
  • 投影3D点的结果的2D点
  • 使用projectionMatrixB
  • 投影3D点的结果的2D点

要回答这个问题,2D点具有负值这一事实并没有错。

AFAIK,在calib模块中,当处理2D点(像素坐标)时,坐标(0,0)应始终位于图像的中心附近而不是左上角。因此,自然地,图像左侧区域中的任何点都具有x <1。 0,并且图像的上部区域中的任何点都具有y <0。 0