1、图像仿射变换
仿射变换就是图像的旋转、平移和缩放操作的统称,可以表示为线性变换和平移变换的叠加。
OpenCv4 中没有专门的图像旋转函数,而是通过图像的仿射 变换实现图像的旋转。首先需要确定旋转角度和旋转中心,之后确定旋转矩阵,最终通过仿射变换实现图像旋转。由getRotationMatrix2D() 函数用于计算旋转矩阵,提供了warpAffine() 函数用于实现图像的仿射变换。
getRotationMatrix2D()函数原型
Mat cv::getRotationMatrix2D( Point2f center, double angle, double scale )
其中,center : 图像旋转的中心位置
angle : 图像旋转的角度,单位为度,正值为逆时针旋转
scale :两个轴的比例因子,可以实现旋转过程中的图像缩放,不缩放则为1
该函数返回图像旋转矩阵,返回值的数据类型时Mat 类,是一个2×3 的矩阵(具体不展开了)。
在确定了旋转矩阵后,通过warpAffine() 函数进行仿射变换,就可以实现图像的旋转。
warpAffine() 函数原型
void cv::warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize,
int flags = INTER_LINEAR, int borderMode = BORDER_CONSTANT ,
const Scalar& borderValue = Scalar())
其中,src:输入图像
dst:仿射变换后输出图像,与src 数据类型相同,尺寸与·dsize 相同
M:2×3 的变换矩阵
dsize:输出图像的尺寸。
flags:插值方法标志,可选参数及含义见下表
borderMode: 像素边界外推方法的标志
borderValue: 填充边界使用的数值,默认情况下为0。
该函数第三个参数为前面求取的图像旋转矩阵。
图像仿射变换插值方法标志 | 作用 |