Dans cet article, nous abordons les manipulations de base d’image avec OpenCV, savoir réduire la taille d’une image, en extraire une zone ou encore la convertir en niveau de gris, …
Cette introduction va se servir des lignes du code que nous avons apprises dans l’article pour apprendre à lire des images. Si vous n’êtes pas à l’aise avec ces lignes, je vous invite à consulter cet article .
Commençons donc par charger notre image.
import cv2 image=cv2.imread('Lena.png') cv2.imshow("original",image) cv2.waitKey(0)
Cette partie était plutôt simple, nous l’avons déjà vue . Pour les deux prochaines étapes, nous allons avoir besoin de connaître une information importante sur l’image d’origine, à savoir sa taille. Pour ce faire, nous allons consulter l’attribut shape de notre image.
print(image.shape)
Lorsque nous exécutons cette ligne, nous obtenons la taille de l’image en sortie dans le terminal: (168,300,3). Le premier nombre correspond au nombre de ligne de notre image, le second donne le nombre de colonnes et enfin le troisième correspond au nombre de composantes (R, G et B). Lorsque l’on travaille avec les images, l’habitude est d’exprimer ces valeurs en hauteur (height) et en largeur (width). La première valeur correspond donc à la hauteur, la seconde à la largeur.
Réduction de la taille de l’image
Passons à la réduction de la taille de notre image, nous souhaitons par exemple avoir une taille en hauteur de 100 pixels:
r=100/image.shape[0] dim=(int(image.shape[1]*r),100) reduite=cv2.resize(image, dim, interpolation =cv2.INTER_AREA) cv2.imshow('reduite',reduite) cv2.waitKey(0) print(reduite.shape)
Nous souhaitons conserver l’aspect de l’image. Nous calculons donc le ratio entre notre taille en hauteur et notre nouvelle taille à la ligne 8 afin de pouvoir l’appliquer à la largeur de l’image. Nous définissons la dimension de notre nouvelle image à la ligne 9. La dimension utilisé lors de l’application de la fonction cv2.resize() est de la forme (largeur, hauteur). Notre nouvelle largeur est donc notre ancienne largeur multipliée par le ratio que nous avons calculé.
La réduction de l’image intervient à la ligne 10. Le premier paramètre correspond à notre image d’origine, le second correspond aux dimensions que nous avons calculées précédemment. enfin le troisième paramètre correspond à la manière utilisée pour la réduction.
Notre nouvelle image est de taille (100,178,3), ce que nous voulions.
Extraction d’une partie de l’image
Passons maintenant à l’extraction de zone dans notre image. nous souhaitons extraire la tête de Lena:
crop=reduite[130:230,50:130] cv2.imshow('extrait',crop) cv2.waitKey(1000)
Pour ce faire, rien de plus simple, nous indiquons uniquement les bornes de début et de fin de la zone à extraire. Nous commençons par les coordonnées en hauteur, puis en largeur.
Changement de repère colorimétrique
Nous en sommes las de la couleur et nous voulons passer en niveau de gris, pas de souci !
gray=cv2.cvtColor(crop, cv2.COLOR_RGB2GRAY) cv2.imshow('extrait',gray) cv2.waitKey(1000)
Si vous voulez connaître les différents types de conversion, je vous invite à consulter cette page.
Vous connaissez maintenant quelques éléments de manipulations d’image.
1 commentaire
Sélectionner une région d’intérêt (ROI) avec OpenCV – Pymotion · 17 décembre 2024 à 9h23
[…] une condition ligne 15 pour découper l’image uniquement lorsqu’une zone est définie. Nous découpons ensuite l’image ligne 16, nous l’affichons lignes 17-18. Pour finir, nous enregistrons l’image […]