Transformation géométrique des images (zoom, translation, rotation)

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
  • Insérer la description de l'image ici

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

Insérer la description de l'image ici

2 Traduction d'images

Insérer la description de l'image ici

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

Insérer la description de l'image ici

3 Rotation des images

Insérer la description de l'image ici

Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici

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)

Affichage des résultats

Insérer la description de l'image ici

Guess you like

Origin blog.csdn.net/qq_53545309/article/details/132791750