我有双摄像头设置并尝试在其上制作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);
答案 0 :(得分:3)
校准相机系统时,必须以单位形式输入网格图案的大小,并且平移向量共享相同的单位。
我对Ogre并不熟悉,但我认为你的食人魔场景中必定有一个全局坐标系,而且该坐标系必须有一个指定的单位。