想要旋转一幅图像, 需要两个参数:
- 旋转图像所要围绕的中心
- 旋转的角度. 在OpenCV中正角度是逆时针的
- 可选择: 缩放因子
1、getRotationMatrix2D 获取旋转矩阵
【使用opencv的仿射变换函数warpAffine实现对图像的任意角度旋转】Mat getRotationMatrix2D(Point2f center, double angle, double scale)
第一个参数,Point2f类型的center,表示源图像的旋转中心。
第二个参数,double类型的angle,旋转角度。角度为正值表示向逆时针旋转(坐标原点是左上角)。
第三个参数,double类型的scale,缩放系数。
2、warpAffine 实现坐标系仿射变换
void warpAffine(InputArray src,OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=https://www.it610.com/article/Scalar())
第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。
第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,需和源图片有一样的尺寸和类型。
第三个参数,InputArray类型的M,2×3的变换矩阵。
第四个参数,Size类型的dsize,表示输出图像的尺寸。
第五个参数,int类型的flags,插值方法的标识符。此参数有默认值INTER_LINEAR(线性插值),可选的插值方式如下:
- INTER_NEAREST - 最近邻插值
- INTER_LINEAR - 线性插值(默认值)
- INTER_AREA - 区域插值
- INTER_CUBIC –三次样条插值
- INTER_LANCZOS4 -Lanczos插值
- CV_WARP_FILL_OUTLIERS - 填充所有输出图像的象素。如果部分象素落在输入图像的边界外,那么它们的值设定为 fillval.
- CV_WARP_INVERSE_MAP –表示M为输出图像到输入图像的反变换,即 。因此可以直接用来做象素插值。否则, warpAffine函数从M矩阵得到反变换。
void rotate_test()
{
Matimage(240, 320, CV_8U, Scalar(0));
Pointcenter(130, 55);
doubleangle = 15;
rectangle(image, Rect(80, 60, 100, 50), Scalar(255), CV_FILLED);
Mat R = getRotationMatrix2D(center, angle, 1.0);
// 逆时针旋转angle
Mat imgR;
warpAffine(image, imgR, R, Size(320, 240));
imshow("Image", image);
imshow("Rotate image", imgR);
waitKey(0);
}
文章图片
文章图片
REF:
https://blog.csdn.net/qq_18343569/article/details/47952591
https://blog.csdn.net/billbliss/article/details/43758879
https://blog.csdn.net/cqltbe131421/article/details/60954284
推荐阅读
- opencv|opencv 几何变换之仿射变换
- #|【opencv】关于透视变换
- OpenCV|Opencv中使用Surf特征实现图像配准及对透视变换矩阵H的平移修正
- OpenCV|OpenCV C++案例实战四《图像透视矫正》
- 算法|【机器学习】基于Logistic Regression的新冠肺炎CT影像识别
- opencv|python-opencv给图像添加高斯噪声
- 计算机视觉|基于聚类的图像分割-Python
- 计算机视觉|opencv学习笔记之绘制图像直方图
- 深度学习|将多类分割灰度标签图转RGB三通道图