使用this工具箱,我正在对相机进行校准。
然而,工具箱以矩阵形式输出结果,并且作为一个菜鸟我真的不懂肮脏的东西。
矩阵的形式如下。
其中R是旋转矩阵,T是平移向量。
这些是我从工具箱中得到的结果。它以像素为单位输出值。
-0.980755 -0.136184 -0.139905 217.653207
0.148552 -0.055504 -0.987346 995.948880
0.126695 -0.989128 0.074666 371.963957
0.000000 0.000000 0.000000 1.000000
使用这些数据我可以知道我的相机旋转了多少以及它与校准物体的距离吗?
答案 0 :(得分:3)
距离部分很容易。来自原点的翻译由最右列中的前三个数字给出。这分别代表x,y和z方向的平移。在您的示例中,相机的位置p =(p x ,p y ,p z )=(217.653207,995.948880,371.963957)。您可以在摄像机的位置和校准对象的位置之间取欧几里德距离(c x ,c y ,c z )。也就是说它只是sqrt((p x -c x ) 2 +(p y -c y ) 2 +(p z -c z ) 2 )
更困难的部分是关于在矩阵的左上3x3元素中捕获的旋转。如果不知道他们到底是怎么来的,那你就有点不走运了。也就是说,将它转换回Euler Angles并不容易,如果这是你想要的。但是,您可以将这些元素转换为Quaternion Rotation,这将为您提供唯一的单位向量和角度,以将相机旋转到该方向。提供了计算的细节here。一旦你有四元数旋转,你可以很容易地将它应用于向量n =(0,0,1),向上=(0,1,0)和向右=(1,0,0)以获得正常(方向)相机是指向的,向上和向右的向量。只有当您对从当前位置向左或向右旋转相机感兴趣时,右矢量才有用。
答案 1 :(得分:1)
我猜测代码使用的是“standard”形式 - 然后您会在opencv library docs或其书籍中找到更多详细信息。