1 回答
TA贡献1873条经验 获得超9个赞
Solvepnp 不提供实际的旋转值,它用于获取真实世界的点,因此为了获得实际的旋转角度,您必须执行更多步骤:首先使用 solvepnp 获取旋转向量。其次使用罗德里格斯将其转换为旋转矩阵。现在使用分解投影矩阵来计算欧拉角。这些欧拉角为您提供沿轴的旋转。你可以试试这个:
void getEulerAngles(Mat &rotCamerMatrix,Vec3d &eulerAngles){
Mat cameraMatrix,rotMatrix,transVect,rotMatrixX,rotMatrixY,rotMatrixZ;
double* _r = rotCamerMatrix.ptr();
double projMatrix[12] = {_r[0],_r[1],_r[2],0,
_r[3],_r[4],_r[5],0,
_r[6],_r[7],_r[8],0};
decomposeProjectionMatrix( Mat(3,4,CV_64FC1,projMatrix),
cameraMatrix,
rotMatrix,
transVect,
rotMatrixX,
rotMatrixY,
rotMatrixZ,
eulerAngles);
}
调用函数如下:
Vec3d eulerAngles;
getEulerAngles(rotCamerMatrix1,eulerAngles);
您的旋转角度将在哪里:
yaw = eulerAngles[1];
pitch = eulerAngles[0];
roll = eulerAngles[2];
其中 pitch 是您沿 Y 轴的旋转。
- 1 回答
- 0 关注
- 187 浏览
添加回答
举报