python图像几何变换

文章目录

    • 图像平移变换
    • 图像缩放变换
    • 图像旋转变换
    • 图像镜像变换
    • 图像仿射变换
    • 图像透视变换

图像平移变换

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()

python图像几何变换_第1张图片

图像缩放变换

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()

python图像几何变换_第2张图片

图像旋转变换

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()

python图像几何变换_第3张图片

图像镜像变换

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()

python图像几何变换_第4张图片

图像仿射变换

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()

python图像几何变换_第5张图片

图像透视变换

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()

python图像几何变换_第6张图片

你可能感兴趣的:(python图像处理,python)