关于solvePNP的一点思考之二通过solvePnP求解相机位置

        在调用solvePnP函数之后会得到旋转向量rvec和平移向量tvec。确定相机位置就需要用到这两个向量。在介绍相机位置计算方法之前需要对solvePnP做简要介绍。与solvePnP函数有关的坐标系有三个,分别是世界坐标系(物体坐标系)、相机坐标系(以相机光心为原点的坐标系)、像素坐标系(图像坐标系)。solvePnP就是利用物体在像素坐标系的坐标和在世界坐标系的坐标的对应关系来求解相机位置的。

    在solvePnP调用结束后,需要使用罗德里格斯变化将旋转向量转换成旋转矩阵。此处旋转矩阵表示从相机坐标系到世界坐标系(物体坐标系)的旋转。此时可以直接由旋转矩阵和平移向量来计算相机位置:

                                                                        Pcam=-R' * t       

        此处R为旋转矩阵,tvec为旋转向量,即负的旋转矩阵的转置乘上平移向量。由于旋转矩阵的特性,此处也可以使用负的旋转矩阵的转逆乘上平移向量,但是由于求逆计算较为复杂,因此大多数情况下使用第一种方法。相机位置确定下来之后就要考虑相机朝向的问题了,相机朝向可由欧拉角来表示,由旋转矩阵获得欧拉角的方法我会放在我的GitHub主页上,感兴趣的可以去看一下,主要有两种方法,合成投影矩阵法以及旋转矩阵直接推到法。

    确定相机位置的另一种方法是先由旋转矩阵求出欧拉角,分别记作。相机坐标系按照z-y-x的顺序绕坐标轴旋转对应角度便达到与世界坐标系平行的位置,平移向量本身表示世界坐标系原点指向相机坐标系原点的向量,经过旋转,相机坐标系与世界坐标系平行,此时,平移向量便成为了相机在世界坐标系下的位置,将平移向量绕坐标轴反向旋转对应的欧拉角便可以求出此时相机在世界坐标系下的位置。

相关代码片段可以去我的GitHub主页上查找,https://github.com/lircsszz/

你可能感兴趣的:(OpenCV)