1 回答

TA貢獻1873條經驗 獲得超9個贊
Solvepnp 不提供實際的旋轉值,它用于獲取真實世界的點,因此為了獲得實際的旋轉角度,您必須執行更多步驟:首先使用 solvepnp 獲取旋轉向量。其次使用羅德里格斯將其轉換為旋轉矩陣?,F在使用分解投影矩陣來計算歐拉角。這些歐拉角為您提供沿軸的旋轉。你可以試試這個:
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 關注
- 205 瀏覽
添加回答
舉報