将OpenCV旋转和平移向量转换为XYZ旋转和XYZ位置

Joh*_*ohn 14 c++ opencv rotation rotational-matrices

谷歌的结果和stackoverflow帖子似乎回答了这个问题,但简单的事实是我无法理解它们.无论我读了多少,我都无法绕过四元数和欧拉角以及罗德里格兹的变换以及所有这些.

任何人向我解释,就像我是12,如何从OpenCV的solvePnP()方法返回的旋转和平移向量到xyz位置和xyz旋转值,我可以插入到3D图形应用程序?

这适用于c ++中的增强现实应用程序.我启动并运行OpenCV部件,跟踪标记板并将旋转和平移向量发送到图形程序,但我不知道如何使用该信息来构建我的3d对象.

我真的很想理解这背后的数学,并且会理解这里对理论的任何耐心解释.但是我也会找到一些指向我可以复制/粘贴的代码的指针,并在另一天学习理论.事实上,我似乎通过查看具体代码并向理论工作倒退来更快地学习这样的东西.

编辑:就像这样 ......这显然应该指向正确的方向,但它也可能是我所知道的时间机器的计划.我想到我可能要求补习高中数学,但这不是第一次.

编辑:以下是从solvePnP()...返回的旋转矢量和平移向量的示例...转换为XML以便跳转到图形应用程序.请注意,我看过的每一个都包含三行一列.

<Tvec type_id="opencv-matrix">
  <rows>3</rows>
  <cols>1</cols>
  <dt>f</dt>
  <data>
    -2.50094433e+01 -6.59909010e+00 1.07882790e+02
  </data>
</Tvec>
<Rvec type_id="opencv-matrix">
  <rows>3</rows>
  <cols>1</cols>
  <dt>f</dt>
  <data>
    -1.92100227e+00 -2.11300254e-01 2.80715879e-02
  </data>
</Rvec>
Run Code Online (Sandbox Code Playgroud)

MvG*_*MvG 14

最初我对OpenCV使用的格式一无所知.所以先做一些研究.查看文档solvePnP,看起来它返回了一个矩阵.(这些天Rodrigues2,文档旧版本中提到的功能似乎被称为Rodrigues.)

那里的描述表明您可以期望具有单行或单列的矩阵.该向量的方向表示旋转轴,而向量的长度(或"范数")给出角度.

所以你的输入是角度轴表示.您可以将其解释为围绕x,yz轴的同时旋转.因此,如果通过"XYZ旋转"表示同时旋转,那么您已经在那里了.但是,如果你的意思是某种组合首先围绕x轴旋转,然后围绕y然后围绕z轴旋转,那么你处于一种奇怪的设置,并且可能应该确保你使用正确的API.

如果它是你所追求的欧拉角,那么称它们为"XYZ旋转"有点误导.维基百科文章三维旋转形式给出了各种格式的列表,以及如何在它们之间进行转换.特别是,它确实给出了从轴和角度转换为矩阵并从那里转换为欧拉角的公式.

确保使用正确的表示形式来匹配图形输出设备.或者,如果您有选择,请尝试直接使用旋转marix表示,因为这应该是最容易理解和使用的.