一、概述
getRotationMatrix2D二维旋转仿射矩阵的函数计算。
该函数计算以下矩阵:
其中scale是缩放比,angle旋转角度。
使用getRotationMatrix2D,我们可以指定图像将其旋转的中心点作为第一个参数,然后是旋转角度度为单位),最后是图像的缩放因子。这里,angle 逆时针旋转角度。
二、getRotationMatrix2D函数
1、函数原型
Mat cv::getRotationMatrix2D (Point2f center, double angle, double scale) Matx23d cv::getRotationMatrix2D_ (Point2f center, double angle, double scale)
2、参数详解
center | 旋转中心在源图像中。 |
angle | 旋转角度以度为单位。 逆时针旋转(假设坐标原点为左上角)。 |
scale | 各向同性比例因素。 |
三、OpenCV源码
1、源码路径
include\opencv2\imgproc.hpp opencv\modules\imgproc\src\imgwarp.cpp
2、源码代码
inline Mat getRotationMatrix2D(Point2f center, double angle, double scale) { return Mat(getRotationMatrix2D_(center, angle, scale), true); }
cv::Matx23d cv::getRotationMatrix2D_(Point2f center, double angle, double scale) { CV_INSTRUMENT_REGION(); angle *= CV_PI/180; double alpha = std::cos(angle)*scale; double beta = std::sin(angle)*scale; Matx23d M( alpha, beta, (1-alpha)*center.x - beta*center.y, -beta, alpha, beta*center.x (1-alpha)*center.y ); return M; }
四、效果图像示例
c# opencvsharp简单参考代码如下。
float angle = float.Parse(this.textBox1.Text); float scale = float.Parse(this.textBox2.Text); int x = int.Parse(this.textBox4.Text); int y = int.Parse(this.textBox3.Text); Mat res = new Mat(); Mat m = Cv2.GetRotationMatrix2D(new Point2f(x,y), angle, scale); Cv2.WarpAffine(src, res, m, src.Size());
下图为以点(100, 100)为中心,旋转角度为40度,缩放比为1(即未缩放)得到的结果图。