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

有Google结果和stackoverflow帖子似乎回答了这个问题,但简单的事实是我无法理解他们.不管我读了多少,我都不能把我的头靠在四分位数和欧拉角度,而罗德里格斯也是这样转变的.

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

这是用于c中的增强现实应用程序.我已经开始运行OpenCV部件,跟踪一个标记板并向图形程序发送旋转和转换向量,但是我不知道如何使用这些信息来构造我的3d对象.

我真的想了解这个数学背后的数学,并且会感谢任何对这里理论的耐心解释.但是我也会为一个指针,我可以复制/粘贴一些代码,并学习理论.事实上,我似乎通过看具体的代码和落实理论来更快地学习这样的东西.

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

编辑:
以下是从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>
最佳答案
最初我对OpenCV使用的格式一无所知.所以一些研究第一.看着the documentation for solvePnP,看起来像是返回一个矩阵. Rodrigues2功能提到appears这几天被称为Rodrigues.

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

所以你的输入是在angle-axis representation.你可以解释为simultaneous rotation关于x,y和z轴.所以如果通过“XYZ旋转”你的意思是同时旋转,那么你已经在那里了.但是,如果您是指首先围绕x轴旋转,然后围绕y轴然后绕z轴旋转的组合,则您将处于一个奇怪的设置中,并且可能应该确保使用正确的API.

如果是Euler angles,那么你以后会打电话给他们“XYZ旋转”有点误导.维基百科文章Rotation formalisms in three dimensions列出了各种格式,以及如何在它们之间进行转换.特别地,它确实给出了从轴和角度转换为矩阵并从那里转换成欧拉角的公式.

确保您使用正确的表示符合您的图形输出机械.或者如果您有选择,请尝试直接在rotation marix表示上工作,因为这应该是最容易理解和使用的.

转载注明原文:c++ 将OpenCV旋转和平移向量转换为XYZ旋转和XYZ位置 - 代码日志