Transformation géométrique des images
objectif d'apprentissage
- Mise à l'échelle, traduction, rotation de l'image principale, etc.
- Comprendre les transformations affines et transmissives des images numériques
1 Mise à l'échelle de l'image
La mise à l'échelle est un ajustement de la taille d'une image, la rendant plus grande ou plus petite
cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)
paramètre:
- src : image d'entrée
- dsize ; taille absolue, spécifie directement la taille de l'image ajustée
- fx, fy : taille relative, définissez dsize sur Aucun, puis définissez fx et fy comme facteurs d'échelle
- interpolation : méthode d'interpolation
Code
import cv2 as cv
#读取图片
img1 = cv.imread('lena.png')
#图像的缩放
#法1 :绝对尺寸
rows, cols = img1.shape[:2]
res = cv.resize(img1 , (2*cols,2*rows),interpolation=cv.INTER_CUBIC)
#法二 :相对尺寸
res1 = cv.resize(img1,None,fx=0.5,fy=0.5)
#图像显示
cv.imshow("original",img1)
cv.imshow("enlarge",res)
cv.imshow("shrink",res1)
cv.waitKey(0)
Affichage des résultats
2 Traduction d'images
Code
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
#读取图像
img1 = cv.imread("lena.png")
#图像的平移
rows ,cols = img1.shape[:2]
M= np.float32([[1,0,100],[0,1,50]]) #平移矩阵
dst = cv.warpAffine(img1,M,(cols,rows))
#图像的显示
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(7,4),dpi=100)
axes[0].imshow(img1[:,:,::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("平移后的结果")
plt.show()
Affichage des résultats
3 Rotation des images
Code
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
#读取图像
img = cv.imread("lena.png")
#旋转图像
rows ,cols = img.shape[:2]
#生成旋转矩阵
M = cv.getRotationMatrix2D((cols/2 ,rows/2),90,1)
#进行旋转变换
dst = cv.warpAffine(img,M,(cols,rows))
#图像展示
fig ,axes = plt.subplots(nrows=1,ncols=2,figsize=(5,4),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("旋转后的结果")
plt.show()
M = cv.getRotationMatrix2D((cols/2, lignes/2),90,1)
- cols/2, lignes/2 : centre de rotation
- 90 : Angle de rotation dans le sens antihoraire
- 1 : Rapport de mise à l'échelle (pas de mise à l'échelle)