一、图像仿射变换
1.原理
仿射变换(Affine Transformation 或Affine Map)是一种二维坐标(x, y)到二维坐标(u, v)的线性变换,转换过程坐标点的相对位置和属性不发生变换,是一个线性变换,该过程只发生旋转和平移过程。因此,一个平行四边形经过仿射变换后还是一个平行四边形。所以,仿射= 旋转 + 平移。其数学表达式形式如下:
对应的齐次坐标矩阵表示形式为:
仿射变换保持了二维图形的“平直性”(直线经仿射变换后依然为直线)和“平行性”(直线之间的相对位置关系保持不变,平行线经仿射变换后依然为平行线,且直线上点的位置顺序不会发生变化)。非共线的三对对应点确定一个唯一的仿射变换。图像的旋转加上拉升就是图像仿射变换,仿射变化也是需要一个M矩阵就可以,但是由于仿射变换比较复杂,一般直接找很难找到这个矩阵,opencv提供了根据变换前后三个点的对应关系来自动求解M。这个函数是M=cv2.getAffineTransform(pos1,pos2),其中两个位置就是变换前后的对应位置关系。输出的就是仿射矩阵M。然后在使用函数cv2.warpAffine()。
2.函数原型
仿射变换的函数原型如下:
M = cv2.getAffineTransform(post1, post2)
- post1 = 表示变换前的位置
- post2 = 表示变换后的位置
cv2.warpAffine(src, M, (cols, rows))
- src表示原始图像
- M表示仿射变换矩阵
- (rows, cols)表示变换后的图像大小,rows表示行数,cols表示列数