opencv+python实现图像仿射变换(注释全)

用的是cv2.getAffineTransform这个函数实现

在这里插入代码片
from matplotlib import pyplot as plt
import cv2
import numpy as np

img=cv2.imread('E:/cat.jpg')  #路径名中不能有中文,会出错
s=img.size
print(img.shape)  #输出三维向量(500,500,3)

p1 = np.float32([[50,50],[200,50],[50,200]])                 #变换前
p2 = np.float32([[60,40],[210,40],[60,150]])                 #变换后,相当于平移,可以通过坐标平移,放缩,旋转图像
#p1 = np.array([[50,50],[200,50],[50,200]],np.float32)       #也可以写成这种形式,生成float类型数组
#p2 = np.array([[10,100],[200,20],[100,250]],np.float32)
transform = cv2.getAffineTransform(p1,p2)                            #从位置1放射变换到位置2

res = cv2.warpAffine(img,transform,(500,500))  #将img图像通过M坐标变换为图像res,变换后的图像大小为500*500(坐标轴大小)
plt.subplot(121)                                #subplot为matplotlib.pyplot中的函数#三个参数,分别代表子图的行数,列数,图索引号。
plt.imshow(img[:,:,::-1])                       #image表示待处理的图像,格式必须为数组,创建一个窗口显示图片
plt.subplot(122)
plt.imshow(res[:,:,::-1])              #img[:,:,2]代表R通道,也就是红色分量图像;img[:,:,1]代表G通道,也就是绿色分量图像;img[:,:,0]代表B通道,也就是蓝色分量图像。
                                       #img[:,:,:]原图,由于cv2读图像是BGR顺序,输出图像和原图不一样,所以使用[:,:,::-1]逆序输出成RGB
#plt.imshow(res[:,:,[2,1,0]])           #也可以使用这种方法输出图像
plt.show()                              #显示图像

opencv+python实现图像仿射变换(注释全)_第1张图片

你可能感兴趣的:(opencv,python,opencv,python)