概述
1.仿射变换:应用在二维平面中,主要包括旋转,平移,缩放,裁剪,反转,可以保证图像物体的形状的平行性。
2.透视变换:应用在三维空间中,不能保证物体的平行性。
3.仿射变换是透视变换的子集。
仿射变换
仿射变换是一种二维坐标到二维坐标之间的线性变换,任意的仿射变换都能表示为乘以一个矩阵(线性变换),再加上一个向量 (平移) 的形式。变换矩阵为2x3维度。
方程组有6个未知数,需要求解3组映射点,三个点确定一个平面。
#创建一个2*3的矩阵
#p1、p2分别为输入、输出图像的三个点坐标
M = cv.getAffineTransform(p1, p2)
#实现仿射变换
dst = cv.warpAffine(img, M, (cols,rows))
图像示例:
透视变换
透视变换是一种是二维(x,y)到三维(X,Y,Z),再到另一个二维(x’,y’)空间的映射,通过矩阵乘法实现,矩阵为3x3的维度。
方程组有K11,K12,K13,K21,K22,K23,K31,K32共8个未知数,需要求解四组映射点,四个点确定一个三维空间。
#p1、p2分别为输入、输出图像的四个点坐标
M = cv.getPerspectiveTransform(p1,p2)
#也可以使用如下函数从一堆点中计算一个变换矩阵H
H, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
#透视变换
dst = cv.warpPerspective(img, M, (cols, rows))
图像示例: