一、opencv仿射与旋转原理
- 仿射变换矩阵求取
warp_x = getAffineTransform( srcTri, dstX )
// 设置源图像和目标图像上的三组点以计算仿射变换
srcTri[0] = cv::Point2f( 0.0,0.0 );
srcTri[1] = cv::Point2f( src.cols - 1, 0.0 );
srcTri[2] = cv::Point2f( 0.0, src.rows - 1 );
//以y轴(中轴)旋转,h不变,w缩小
float err_x = 0.5*src.cols*(1.0 - cos(angley));
cout << "err_x = "<< err_x <<endl;
dstY[0] = cv::Point2f( err_x,0.0 );
dstY[1] = cv::Point2f( src.cols - 1 - err_x, 0.0);
dstY[2] = cv::Point2f( err_x, src.rows - 1 );
//求取仿射矩阵
warp_y = getAffineTransform( srcTri, dstY );
原理:参考
图像旋转算法原理
3D中绕坐标轴的旋转
- 绕点旋转(即在该二维平面内,认为绕z轴)
- 绕y轴旋转(图像宽度cols改变,y不变)
- 绕x轴旋转(图像高度rows改变,x不变)
2.仿射变换应用
warpAffine( src, src_x, warp_x, src_x.size());
参考