从旋转矩阵相机/标记获取方向角

问题描述

当我从函数 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