600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > OpenCV学习笔记(一)——旋转向量与旋转矩阵相互转化

OpenCV学习笔记(一)——旋转向量与旋转矩阵相互转化

时间:2022-05-14 08:35:58

相关推荐

OpenCV学习笔记(一)——旋转向量与旋转矩阵相互转化

转自:/s/blog_5fb3f125010100hp.html

从今天开始,把自己学习OpenCV的心得记录下来,以系列的形式贴到博客中,以期交流与备查之用,笔记内容主要偏向于算法的理解。处理三维旋转问题时,通常采用旋转矩阵的方式来描述。一个向量乘以旋转矩阵等价于向量以某种方式进行旋转。除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转,旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。算法过程如下:

式中,norm为求向量的模。反变换也可以很容易的通过如下公式实现:

OpenCV实现Rodrigues变换的函数为

intcvRodrigues2(constCvMat*src,CvMat*dst,CvMat*jacobian=0);

src为输入的旋转向量(3x1或者1x3)或者旋转矩阵(3x3)。

dst为输出的旋转矩阵(3x3)或者旋转向量(3x1或者1x3)。

jacobian为可选的输出雅可比矩阵(3x9或者9x3),是输入与输出数组的偏导数。

可以用上述方式法验证以下例子

验证代码如下:

#include <stdio.h>

#include <cv.h>

voidmain()

{

inti;

doubler_vec[3]={-2.100418,-2.167796,0.273330};

doubleR_matrix[9];

CvMatpr_vec;

CvMatpR_matrix;

cvInitMatHeader(&pr_vec,1,3,CV_64FC1,r_vec,CV_AUTOSTEP);

cvInitMatHeader(&pR_matrix,3,3,CV_64FC1,R_matrix,CV_AUTOSTEP);

cvRodrigues2(&pr_vec,&pR_matrix,0);

for(i=0;i<9;i++)

{

printf("%f\n",R_matrix[i]);

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。