opencv中reprojectImageTo3D函数的Q矩阵

g.a*_*a12 8 opencv disparity-mapping stereo-3d depth 3d-reconstruction

我正在opencv做一个项目来检测使用立体声校准的盲人路径中的障碍物.我已经正确地计算了视差图.现在要找到障碍物距离相机的距离,我想要它的3D坐标[X,Y,Z],我猜是可以通过reprojectImageTo3D()找到,但是我没有Q矩阵在这个函数中使用,因为我从stereoRectify()获得的Q矩阵可能因为我使用预校准图像而变为零.虽然我确实拥有相机的内在和外在参数.所以我的问题是,如果我知道焦距,基线以及我相机的其他所有内容,如何手动创建Q矩阵以直接在函数reprojectImageTo3D()中使用?Q矩阵的基本格式是什么?

And*_*w W 16

Q矩阵的形式如下:

Q矩阵图像

在这种形象,Ç Xç Ÿ在左摄像机主点的坐标(如果你没有与左相机主导立体匹配),C" X是在正确的相机主点的x坐标(ç XC" X如果指定了将是相同的CV_CALIB_ZERO_DISPARITY为标志stereoRectify()),˚F是焦距和Ť X为基线长度(可能为负的基线长度的,这是从一个光学中心到其他I翻译认为).

我建议您查看学习OpenCV的书籍以获取更多信息.它仍然基于较旧的C接口,但很好地解释了基础理论,并且是我从中获取Q矩阵形式的地方.

  • @Employee:f以像素为单位。Tx 的单位是米(或毫米) (2认同)

小智 5

如果要直接创建 Q 矩阵:

cv::Mat Q;
Q.at<double>(0,0)=1.0;
Q.at<double>(0,1)=0.0;
Q.at<double>(0,2)=0.0;
Q.at<double>(0,3)=-160; //cx
Q.at<double>(1,0)=0.0;
Q.at<double>(1,1)=1.0;
Q.at<double>(1,2)=0.0;
Q.at<double>(1,3)=-120;  //cy
Q.at<double>(2,0)=0.0;
Q.at<double>(2,1)=0.0;
Q.at<double>(2,2)=0.0;
Q.at<double>(2,3)=348.087;  //Focal
Q.at<double>(3,0)=0.0;
Q.at<double>(3,1)=0.0;
Q.at<double>(3,2)=1.0/95;    //1.0/BaseLine
Q.at<double>(3,3)=0.0;    //cx - cx'
Run Code Online (Sandbox Code Playgroud)

但是您应该校准两个相机,然后从 cv::stereoRectify 获取 Q 矩阵。小心,将 Q 矩阵读作双精度值。