图像平移变换
M=numpy.float32([[1,0,x],[0,1,y]])
- M:平移矩阵
- x:水平平移量
- y:垂直平移量
cv2.wrapAffine(src,M,dsize,…) - src:原始图像
- M:平移矩阵
- dsize:输出图像尺寸大小
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('b.jpg')
#向上平移
M1=np.float32([[1,0,0],[0,1,50]])
#向下平移
M2=np.float32([[1,0,0],[0,1,-50]])
#向左平移
M3=np.float32([[1,0,50],[0,1,0]])
#向右平移
M4=np.float32([[1,0,-50],[0,1,0]])
col,row=img.shape[:2]
r1=cv2.warpAffine(img,M1,(col,row))
r2=cv2.warpAffine(img,M2,(col,row))
r3=cv2.warpAffine(img,M3,(col,row))
r4=cv2.warpAffine(img,M4,(col,row))
titles=['i1','i2','i3','i4']
images=[r1,r2,r3,r4]
for i in range(4):
plt.subplot(2,2,i+1)
plt.imshow(images[i])
plt.title(titles[i])
#不展示x、y轴
plt.xticks([])
plt.yticks([])
plt.show()
图像缩放变换
cv2.resize(src,dsize,…)
- src: 原始图像
- dsize:图像缩放大小
import cv2
import numpy as np
img=cv2.imread('b.jpg')
#图像缩放的多种方式
r1=cv2.resize(img,(100,100))
r2=cv2.resize(img,None,fx=0.5,fy=0.5)
r3=cv2.resize(img,(int(img.shape[0]*0.8),int(img.shape[1]*0.4)))
cv2.imshow('r1',r1)
cv2.imshow('r2',r2)
cv2.imshow('r3',r3)
cv2.waitKey(0)
cv2.destoryAllWindows()
图像旋转变换
M=cv2.getRotationMatrix2D(center,angle,scale)
- center:旋转中心点
- angle:旋转角度
- scale:比例因子
cv2.warpAffine(src,M,(cols,rows)) - src:原始图像
- M:旋转参数,cv2.getRotationMatrix2D函数定义的结果
- (cols,rows):输出图像的宽高
import cv2
import numpy as np
img=cv2.imread('b.jpg')
M=cv2.getRotationMatrix2D(img.shape[:2],30,0.6)
result=cv2.warpAffine(img,M,img.shape[:2])
cv2.imshow('img',img)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()
图像镜像变换
cv2.flip(src,flipCode)
- src:原始图像
- flipCode:翻转方向
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('a.jpg')
#参数=0,以X轴为对称轴翻转
r1=cv2.flip(img,0)
#参数=1,以Y轴为对称轴翻转
r2=cv2.flip(img,1)
#参数<0,以X轴和Y轴为对称轴翻转
r3=cv2.flip(img,-1)
titles=['img','r1','r2','r3']
images=[img,r1,r2,r3]
for i in range(4):
plt.subplot(2,2,i+1)
plt.imshow(images[i])
plt.title(titles[i])
plt.xticks([])
plt.yticks([])
plt.show()
图像仿射变换
M=cv2.getAffineTransform(pos1,pos2)
- pos1:变换前的位置
- pos2:变换后的位置
cv2.warpAffine(src,M,(cols,rows)) - src:原始图像
- M:仿射变换矩阵
- (cols,rows):变换后的图像大小
import cv2
import numpy as np
img=cv2.imread('b.jpg')
pos1=np.float32([[10,50],[30,100],[100,100]])
pos2=np.float32([[30,80],[50,150],[200,50]])
M=cv2.getAffineTransform(pos1,pos2)
result=cv2.warpAffine(img,M,img.shape[:2])
cv2.imshow('img',img)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()
图像透视变换
M=cv2.getPerspectiveTransform(pos1,pos2)
- pos1:透视变换前的四个点对应的位置
- pos2:透视变换后的四个点对应的位置
cv2.warpPerspective(src,M,(cols,rows)) - src:原始图像
- M:仿射变换矩阵
- (cols,rows):变换后的图像大小
import cv2
import numpy as np
img=cv2.imread('a.jpg')
pos1=np.float32([[200,100],[250,200],[100,150],[100,300]])
pos2=np.float32([[0,0],[50,0],[0,100],[50,100]])
M=cv2.getPerspectiveTransform(pos1,pos2)
result=cv2.warpPerspective(img,M,img.shape[:2])
cv2.imshow('img',img)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()