微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从旋转矩阵相机/标记获取方向角

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。