问题描述
当我从函数 estimatePoseSingleMarkers
获得 rvecs 时,如何获得标记方向的角度?
在 Stackoverflow 和其他论坛上,函数 Rodrigues
似乎是必需的,但我不明白该函数到底是做什么的。
应用这个函数后,我明白我需要将函数Rodrigues
的结果转换为欧拉角。
我希望有一个浮点向量表示一个角度,例如 45.6°。
但我有奇怪的价值观:1.68175 -0.133805 -1.5824
对于这个值,我把我的标记放在我的相机前面,所以这些值不对应。
这是我的代码:
cv::Mat R;
cv::Rodrigues(rvecs[i],R); // R is 3x3
std::vector<float> v = rotationMatrixToEulerAngles(R);
for(size_t i = 0; i < v.size(); i ++)
std::cout << v[i] << std::endl;
函数rotationMatrixToEulerAngles来自:https://learnopencv.com/rotation-matrix-to-euler-angles,我尝试了其他的东西,但我仍然有奇怪的值,所以我不明白……我想要像[180,90,0]这样的东西或 [45,152] 等
如果有人可以逐步解释我如何从 rvecs 中获得角度向量(每个轴的角度)。
更新:
我在互联网上测试了许多不同的代码,我阅读了文章,但我没有很好的价值。 我现在得到了“好的”浮点值,例如 190.45 或 80.32 等,因为我乘以 (180/M_PI) 但这些值是错误的。
当我将标记放在相机前时,我认为应该有 [0,0] ,但我没有。 有什么问题?
解决方法
我发现了问题:我需要将 rvecs[i][0] [i][1] [i][2] 放在一个向量中,然后将 cv::Rodrigues 与这个向量一起使用并使用函数 rotationMatrixToEuleurAngles