了解opencv stereoCalibrate函数输出

时间:2015-07-09 08:45:13

标签: opencv computer-vision

我有双摄像头设置并尝试在其上制作AR。经过立体校准和校正后,左右图像效果很好,极线对齐良好。

我用一个图像检测AR标记,并希望通过适当的相机移动在另一个图像上渲染它。

stereoCalibration给出了两个相机之间的关系:

R: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 9.9922768917754268e-001, 2.4924911359451081e-002,
       3.0377194976358678e-002, -2.4063699016973375e-002,
       9.9930712233274999e-001, -2.8393901539922377e-002,
       -3.1063862775397383e-002, 2.7640984945580323e-002,
       9.9913513219219230e-001 ]
T: !!opencv-matrix
   rows: 3
   cols: 1
   dt: d
   data: [ -5.5054479009004126e+001, -7.1894766441986058e-001,
       -2.8661303301073544e+000 ]

我该怎么理解这个?特别是翻译载体[-55.05,-0.718,-2.866]?这是像素单位吗?

在渲染部分,我使用Ogre并制作一个自定义投影矩阵(从相机校准矩阵中获取)。我用矢量[x,y,z]制作一个平移矩阵,并将它加倍到自定义投影矩阵。这些相关的单位是什么?我的代码的快照就像:

double pMatrix[16];
    camParams.OgreGetProjectionMatrix(camParams.CamSize,camParams.CamSize, pMatrix, 0.05,50, false);
    Ogre::Matrix4 PM(pMatrix[0], pMatrix[1], pMatrix[2] , pMatrix[3],
            pMatrix[4], pMatrix[5], pMatrix[6] , pMatrix[7],
            pMatrix[8], pMatrix[9], pMatrix[10], pMatrix[11],
            pMatrix[12], pMatrix[13], pMatrix[14], pMatrix[15]);    

.....

//translate the camera a little for the right display
    Ogre::Matrix4 matrix_translate;
    matrix_translate.makeTrans(Ogre::Vector3(-0.3,0.0,0.0));
    Ogre::Matrix3 matrix_rotate;

    camera_right->setCustomProjectionMatrix(true, matrix_translate*PM);
    camera_right->setCustomViewMatrix(true, Ogre::Matrix4::IDENTITY);   

1 个答案:

答案 0 :(得分:3)

校准相机系统时,必须以单位形式输入网格图案的大小,并且平移向量共享相同的单位。

我对Ogre并不熟悉,但我认为你的食人魔场景中必定有一个全局坐标系,而且该坐标系必须有一个指定的单位。