函数原型:
getRotationMatrix2D()函数原型:
Mat cv::getRotationMatrix2D(Point2f center,
double angle,
double scale
)
center:图像旋转的中心位置
angle:图像旋转的角度,单位为度(°),值为正时进行逆时针旋转
scale:两个轴的比例因子,用于旋转过程中的图像缩放,不缩放时输入1
getAffineTransform()函数原型:
Mat cv::getAffineTransform(const Point2f src[],
const Point2f dst[]
)
src[]:源图像中的3个像素的坐标
dst[]:目标图像中的3个像素的坐标
仿射变换的概念
仿射变换是图像的旋转、平移和缩放操作的统称,可以表示为平移变换和线性变换的叠加。仿射变换的数学表示是先乘以一个线性变换矩阵再加上一个平移向量,其中线性变换矩阵是一个的方阵,平移向量是一个
的向量。假设存在线性变换矩阵
和平移向量
,仿射矩阵如下所示:
根据和
,以及图像的像素值
, 仿射变换的数学原理可以表示为下式,其中
是变换后的像素值:
两种方法的区别
getRotationMatrix2D()函数通过图像的旋转中心点center来确定坐标原点,通过旋转角度angle确定图像需要旋转多少度,最后通过scale来确定是否需要进行缩放。这个方法适用于待变换的图像中旋转中心的坐标容易得到,并且旋转的角度与缩放的比例也是一般值的情况下。在这三个参数都容易得到时,使用getRotationMatrix2D()来得到仿射矩阵比较容易。
getAffineTransform()函数需要得到图像变换前后的三个点,通过计算三个点的对应关系来得到图像旋转的坐标原点,旋转角度和缩放比例。其不需要预先知道旋转中心,旋转角度和缩放比例。这个方法适用于待变换的图像中的点坐标容易获得,并已知变换后图像中的三个坐标的情况。需要注意的是,该方法中所用到的点需要一一对应,否则会得到错误的变换图像。