1.几何变换的实际意义
从线性代数角度来看,在一个向量[x,y]前面乘以一个矩阵
其本质上,是将向量[x,y]转换到[a1,b1] , [a2,b2]的坐标系中,即实现向量[x,y]的位移
2.扩展缩放
opencv提供cv2.resize(图形文件,(x方向长度,y方向高度),转换模式)或者
Cv2.resize(图形文件,fx=x方向倍数,fy=y方向倍数,转换模式)来实现图形的缩放
例:
img_resize =cv2.resize(img,(2*col,2*row),interpolation=cv2.INTER_CUBIC)
其中转换模式 interpolation= 常用有cv2.INTER_AREA, cv2.INTER_CUBIC,cv2.INTER_LINEAR等,不同之处在于插值方式不同。
结果如下:
3.平移
平移操作本质上,是将每个像素的坐标都乘以一个位移矩阵,使得像素坐标变换来实现位移。
opencv提供cv2.warpAffine(图形文件,位移矩阵,(位移后窗口长度,位移后窗口宽度))来实现位移,
所以位移操作的重点在于构建位移矩阵。位移矩阵格式如下:
tx为x方向位移距离,ty为y方向位移距离。具体推导如下:
例:
M=np.float32([[1,0,50],[0,1,50]])
img_change=cv2.warpAffine(img,M,(2*col,2*row))
其结果如下:
4.旋转
选择操作首先要使用
cv2.getRotationMatrix2D((旋转中心X坐标,旋转中心Y坐标) , 旋转角度 , 旋转后窗口大小倍数)
来构建旋转矩阵。旋转矩阵格式如下:
再将这个旋转矩阵,传给函数cv2.warpAffine()来实现旋转。其原理和位移操作一样。
例:
rotate_M = cv2.getRotationMatrix2D((col/2,row/2),45,0.8)
img_rotate = cv2.warpAffine(img,rotate_M,(col,row))
其结果如下: