opencv 学习decomposeProjectionMatrix函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flyyufenfei/article/details/79207038

decomposeProjectionMatrix

opencv官网函数解释

对cameraMatrix和transVector搞不太懂
自己跑了个程序(贴了一部分),结果如下:

cv::solvePnP(model_points, image_points, camera_matrix, dist_coeffs, rotation_vector, translation_vector);              
cv::Mat rotation_vec;                           //3 x 1
cv::Mat pose_mat = cv::Mat(3, 4, CV_64FC1);     //3 x 4 R | T
cv::Mat euler_angle = cv::Mat(3, 1, CV_64FC1);
cv::Mat out_intrinsics = cv::Mat(3, 3, CV_64FC1);
cv::Mat out_rotation = cv::Mat(3, 3, CV_64FC1);
cv::Mat out_translation = cv::Mat(4, 1, CV_64FC1);
cv::Rodrigues(rotation_vector, rotation_matrix);
cv::hconcat(rotation_matrix, translation_vector, pose_mat);
cv::decomposeProjectionMatrix(pose_mat, out_intrinsics, out_rotation, out_translation, cv::noArray(), cv::noArray(), cv::noArray(), euler_angle);

这里写图片描述

cameraMatrix对应的地方是个单位矩阵,这个完全不知道用来干啥的。。
rotMatrix也就是solvepnp算出来的旋转向量转换得到的旋转矩阵,这个不用多说。
out_translation矩阵是相机在世界坐标系中的坐标,但是是个4*1的矩阵,应该是齐次写法,把第四个数值放大为1后,前三个数值跟着放大相同的倍数就是相机的世界坐标了。(也就是最后一行的数值)
euler_angle是分别绕三个轴的旋转角度。
最后两行是用另一种方法算出来,用来做对比,可以认为是真实值。第一行是三个旋转角度值和帧率,第二行是世界坐标值。

猜你喜欢

转载自blog.csdn.net/flyyufenfei/article/details/79207038
今日推荐