【发布时间】: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