OpenCV Faire pivoter l'image

Ammar Ali 12 avril 2022
  1. Utilisez la fonction rotate() d’OpenCV pour faire pivoter une image en Python
  2. Utiliser la fonction warpAffine() d’OpenCV pour faire pivoter une image en Python
OpenCV Faire pivoter l'image

Ce tutoriel discutera de la rotation d’une image à l’aide des fonctions rotate() et warpAffine() d’OpenCV en Python.

Utilisez la fonction rotate() d’OpenCV pour faire pivoter une image en Python

Nous pouvons utiliser la fonction rotate() d’OpenCV pour faire pivoter une image. Le premier argument de la fonction rotate() est l’image que nous voulons faire pivoter. Le deuxième argument spécifie de combien l’image va tourner et dans quelle direction.

Il n’y a que trois façons de faire pivoter une image à l’aide de la fonction rotate(). Nous pouvons définir le deuxième argument sur cv2.ROTATE_90_CLOKWISE pour faire pivoter l’image de 90 degrés dans le sens des aiguilles d’une montre.

Nous pouvons utiliser le cv2.ROTATE_180 pour faire pivoter l’image de 180 degrés ou la retourner. Nous pouvons utiliser le cv2.ROTATE_90_COUNTERCWISE pour faire pivoter l’image à 90 degrés dans le sens antihoraire ou 270 degrés dans le sens horaire. Ce sont les trois seuls angles pour faire pivoter une image en utilisant la fonction rotate().

Par exemple, lisons une image à l’aide de la fonction imread(), faites-la pivoter de 90 degrés dans le sens des aiguilles d’une montre, puis affichons-la avec l’image d’origine à l’aide de la fonction imshow(). Voir le code ci-dessous.

import cv2
import numpy as np

image = cv2.imread("cat.jpg")
image_norm = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)

cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", image_norm)
cv2.waitKey(0)
cv2.destroyAllWindows()

Production :

faire pivoter les images

En utilisant rotate(), nous ne pouvons faire pivoter une image que sur trois angles, mais si nous voulons faire pivoter une image sur chaque angle, nous pouvons utiliser la fonction warpAffine(), décrite ci-dessous.

Utiliser la fonction warpAffine() d’OpenCV pour faire pivoter une image en Python

Nous pouvons utiliser la fonction warpAffine() d’OpenCV pour faire pivoter une image à n’importe quel angle. La fonction warpAffine() transforme une matrice pour une autre matrice.

Pour faire pivoter une image, il faut trouver sa matrice de rotation à l’aide de la fonction getRotationMatrix2D() d’OpenCV.

Le premier argument de getRotationMatrix2D() est le centre de l’image le long duquel on veut la faire pivoter. Le deuxième argument est l’angle de rotation et le troisième argument est l’échelle de l’image.

Si l’échelle est inférieure à un, l’image deviendra plus petite que l’image d’origine, ou en d’autres termes, elle sera agrandie. L’image sera mise à l’échelle ou agrandie si l’échelle est un nombre positif. Si l’échelle est de 1, l’image ne sera pas mise à l’échelle.

Le premier argument de la fonction warpAffine() est l’image que nous voulons faire pivoter. Le deuxième argument est la matrice de rotation et le troisième argument est la taille de l’image de sortie.

Par exemple, faisons pivoter l’image ci-dessus à 45 degrés autour de son centre. Voir le code ci-dessous.

import cv2
import numpy as np

image = cv2.imread("cat.jpg")

(h, w) = image.shape[:2]
center = (w / 2, h / 2)
angle = 30
scale = 1

M = cv2.getRotationMatrix2D(center, angle, scale)
rotated = cv2.warpAffine(image, M, (w, h))

cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

Production :

faire pivoter les images avec warpAffine

Dans le code ci-dessus, nous avons utilisé la méthode de la forme pour trouver la longueur et la largeur de l’image donnée, puis nous avons calculé le centre de l’image en prenant la moitié de la longueur et de la largeur. Nous pouvons modifier le centre, l’angle et la valeur d’échelle pour obtenir le résultat souhaité.

Nous pouvons également définir le mode de bordure de l’image de sortie à l’aide de l’argument borderMode. Par défaut, le mode bordure est défini sur cv2.BORDER_CONSTANT, et comme vous pouvez le voir, il n’y a pas de bordure aux coins de l’image de sortie.

Nous pouvons définir le mode de bordure sur cv2.BORDER_TRANSPARENT. L’image de sortie aura les mêmes bordures que l’image d’origine, ou les coins resteront les mêmes.

Nous pouvons définir le mode bordure sur cv2.BORDER_REPLICATE. La bordure ou les coins de l’image de sortie seront dessinés en utilisant les pixels voisins.

Cliquez sur ce lien pour plus de détails sur les modes de bordure.

Auteur: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Article connexe - Python OpenCV

Article connexe - OpenCV Image