OpenCV中使用getRotationMatrix2D()和getAffineTransform()进行仿射变换的区别

 函数原型:

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个像素的坐标

仿射变换的概念

仿射变换是图像的旋转、平移和缩放操作的统称,可以表示为平移变换和线性变换的叠加。仿射变换的数学表示是先乘以一个线性变换矩阵再加上一个平移向量,其中线性变换矩阵是一个2\times2的方阵,平移向量是一个2\times1的向量。假设存在线性变换矩阵A和平移向量B,仿射矩阵如下所示:

M=[A\ B]=\begin{bmatrix} a_{00} & a_{01} & b_{00} \\ a_{10} & a_{11} & b_{10} \end{bmatrix}

根据AB,以及图像的像素值\begin{bmatrix} x & y \end{bmatrix}^{T}, 仿射变换的数学原理可以表示为下式,其中T是变换后的像素值:

T=A\begin{bmatrix} x\\ y \end{bmatrix}+B

两种方法的区别

getRotationMatrix2D()函数通过图像的旋转中心点center来确定坐标原点,通过旋转角度angle确定图像需要旋转多少度,最后通过scale来确定是否需要进行缩放。这个方法适用于待变换的图像中旋转中心的坐标容易得到,并且旋转的角度与缩放的比例也是一般值的情况下。在这三个参数都容易得到时,使用getRotationMatrix2D()来得到仿射矩阵比较容易。

getAffineTransform()函数需要得到图像变换前后的三个点,通过计算三个点的对应关系来得到图像旋转的坐标原点,旋转角度和缩放比例。其不需要预先知道旋转中心,旋转角度和缩放比例。这个方法适用于待变换的图像中的点坐标容易获得,并已知变换后图像中的三个坐标的情况。需要注意的是,该方法中所用到的点需要一一对应,否则会得到错误的变换图像。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值