以前,我正在使用另一种方法来确定两个2D图像的3D位置。对于那种(平庸)方法,我必须在图像的中心获得具有原点的2D坐标。因此,我得到了很多负面价值。 OpenCV通常使用let bottom corner作为坐标原点(根本没有负值)
应用程序用户应该可以使用任何一种方法。我可以继续采用这种方式收集2D坐标,还是必须更改它?如果没有,我是否必须使用图像的新中心点(cv::stereoCalibrate
的结果)而不是默认值(frame.cols/2
,frame.rows / 2)?
答案 0 :(得分:0)
使用OpenCV的triangulatePoints
时,需要传递参数:
projectionMatrixA
- 隐含地包含内在相机参数(焦距& 主点偏移,这是从左侧和顶部的像素偏移,应被视为0,0) projectionMatrixB
- 除了固有的相机参数外,投影矩阵还反映了相机相对于某些坐标系的位置。因此,如果您有两个相同的相机,两个投影矩阵仍然会有所不同,因为它们的位置不同。projectionMatrixA
projectionMatrixB
要回答这个问题,2D点具有负值这一事实并没有错。
AFAIK,在calib
模块中,当处理2D点(像素坐标)时,坐标(0,0)应始终位于图像的中心附近而不是左上角。因此,自然地,图像左侧区域中的任何点都具有x <1。 0,并且图像的上部区域中的任何点都具有y <0。 0