花老湿OpenCV学习:Rodrigues()的使用

Rodrigues()可以将旋转向量转化为旋转矩阵,也可以将旋转矩阵转化为旋转向量。

旋转向量指定了旋转轴,同时它的模长也指定了旋转角度.

花老湿OpenCV学习:Rodrigues()的使用_第1张图片

 接下来进行旋转向量到旋转矩阵的转换:

#include 
#include 
using namespace std;
using namespace cv;

void main()
{
	//旋转向量  模代表旋转角度
	Mat src = (Mat_(3, 1) << 0, 0 , CV_PI/2);
	cout << src << endl;
	Mat dst;
	//转化成旋转矩阵
	Rodrigues(src, dst);
	cout << dst << endl;
	
	Mat vec = (Mat_(3, 1) << 1, 0, 0);
	Mat result = dst * vec;
	cout << result << endl;


	
}

我们使用传统的XYZ三维坐标系,这段代码将z轴作为旋转轴,旋转角度为90度。

注意!!!这里需要使用的是CV_PI/2,而不是90。

然后将该旋转向量转化为旋转矩阵,并设置一个初始向量vec(1,0,0),旋转矩阵与初始向量相乘应该得到旋转90度后的向量.

计算结果与预想大致相同,实现了旋转的功能。

花老湿OpenCV学习:Rodrigues()的使用_第2张图片

接来下将旋转矩阵转化为旋转向量:

我们选择的旋转矩阵是由上面代码转化而来的,因此经Rodrigues转化后应为(0,0,pi/2);

#include 
#include 
using namespace std;
using namespace cv;

void main()
{

        //旋转矩阵 
	Mat src = (Mat_(3, 3) << 0, -1, 0,1,0,0,0,0,1);
	cout << src << endl;
	Mat out;
	Rodrigues(src, out);
	cout << out << endl;

	
}

结果如下:

 

花老湿OpenCV学习:Rodrigues()的使用_第3张图片

与预想相符,说明该Api成功将旋转矩阵转化为了旋转向量.

你可能感兴趣的:(OpenCV学习)