【问题标题】:Get orientation angle from rotation matrix (camera/marker)从旋转矩阵(相机/标记)获取方向角
【发布时间】:2021-05-02 14:54:34
【问题描述】:

当我从函数 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,0,152] 等。

如果有人可以逐步解释我如何从 rvecs 中获得角度向量(每个轴的角度)。

更新:

我在互联网上测试了许多不同的代码,我阅读了文章,但我没有很好的价值观。 我现在得到了“好的”浮点值,例如 190.45 或 80.32 等,因为我乘以 (180/M_PI) 但这些值是错误的。

当我将标记放在相机前时,我认为应该有 [0 , 0, 0] ,但我没有。 有什么问题?

【问题讨论】:

    标签: c++ opencv augmented-reality euler-angles


    【解决方案1】:

    我发现了问题:我需要将 rvecs[i][0] [i][1] [i][2] 放入一个向量中,然后将 cv::Rodrigues 与该向量一起使用并使用函数 rotationMatrixToEuleurAngles

    【讨论】:

      猜你喜欢
      • 2022-12-09
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多