OpenCV每日函数 几何图像变换模块 (5) getRotationMatrix2D函数

一、概述

        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(即未缩放)得到的结果图片。 

角度40、缩放比1、旋转中心点坐标100,100

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/125260993
今日推荐