OpenCV 旋转向量与旋转矩阵转化(罗德里格斯 )

一 知识点

处理三维旋转问题时,通常采用旋转矩阵的方式来描述。一个向量乘以旋转矩阵等价于向量以某种方式进行旋转。除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转,旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。

算法过程如下:


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


OpenCV实现Rodrigues变换的函数为

int cvRodrigues2const CvMat* src, CvMat* dst, CvMat* jacobian=0 );

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

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

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

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


二实现

1 配置openCV


2运行vs2010,新建一个空工程


新建一个文件


在空的cpp代码页加入代码

#include <stdio.h>
#include <cv.h>

void main()
{
    
int i;
    
double r_vec[3]={-2.100418,-2.167796,0.273330};
    
double R_matrix[9];
    
CvMat pr_vec;
    
CvMat pR_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=0i<9i++)
    
{
        
printf("%f\n",R_matrix[i]);
    
}
}

生成:


快捷键:ctrl+F5


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值