OpenCV学习笔记(一)——旋转向量与旋转矩阵相互转化
2016-04-22 10:54
405 查看
从今天开始,把自己学习OpenCV的心得记录下来,以系列的形式贴到博客中,以期交流与备查之用,笔记内容主要偏向于算法的理解。 处理三维旋转问题时,通常采用旋转矩阵的方式来描述。一个向量乘以旋转矩阵等价于向量以某种方式进行旋转。除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转,旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。 算法过程如下:
式中,norm为求向量的模。反变换也可以很容易的通过如下公式实现:
OpenCV实现Rodrigues变换的函数为
int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian=0 );
src为输入的旋转向量(3x1或者1x3)或者旋转矩阵(3x3)。
dst为输出的旋转矩阵(3x3)或者旋转向量(3x1或者1x3)。
jacobian为可选的输出雅可比矩阵(3x9或者9x3),是输入与输出数组的偏导数。
可以用上述方式法验证以下例子
验证代码如下:
#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=0; i<9; i++)
{
printf("%f\n",R_matrix[i]);
}
}
相关文章推荐
- linux总线、设备和设备驱动的关系
- linux关闭ssh连接
- linux关闭ssh连接
- [Tomcat]配置静态资源的访问
- Linux下安装Android Studio
- vs+opencv中findcontours崩溃的问题
- 解决在启动eclipse的tomcat进行访问时出现404问题的方法
- 用openjtag调试s3c2440裸机程序
- 王高利:CentOS6.5__VNC Server配置
- Cisco VPP(7) 插件开发
- 【Linux常用命令小手册】
- Xcode真机测试could not find developer disk image解决方法
- Linux常用命令总结--vi编辑器
- XShell 无法匹配outgoing encryption算法/No matching outgoing encryption algorithm found
- linux之间互传文件(ubuntu为例)
- 存储IO
- Linux下文件解压命令
- 十个非常棒的学习angularjs的英文网站
- 不负春光不负卿,听康大厨讲讲OpenStack重要组件的那些事儿
- svn“Previous operation has not finished; run 'cleanup' if it was interrupted“解决方法