想要旋转一幅图像, 需要两个参数:
具体实现有两个步骤:
Mat getRotationMatrix2D(Point2f center, double angle, double scale)
第一个参数,Point2f类型的center,表示源图像的旋转中心。
第二个参数,double类型的angle,旋转角度。角度为正值表示向逆时针旋转(坐标原点是左上角)。
第三个参数,double类型的scale,缩放系数。
void warpAffine(InputArray src,OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。
第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,需和源图片有一样的尺寸和类型。
第三个参数,InputArray类型的M,2×3的变换矩阵。
第四个参数,Size类型的dsize,表示输出图像的尺寸。
第五个参数,int类型的flags,插值方法的标识符。此参数有默认值INTER_LINEAR(线性插值),可选的插值方式如下:
void rotate_test()
{
Mat image(240, 320, CV_8U, Scalar(0));
Point center(130, 55);
double angle = 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