Categories: BaseOpenCV

Manipulations d’image de base

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 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.

Florent

View Comments

Share
Published by
Florent

Recent Posts

Conduite autonome : comment détecter les lignes d’une route

Détecter les voies de circulation est une étape incontournable pour la réalisation d’un système de…

2 jours ago

Capturer une image avec la caméra du Raspberry

Dans cet article, nous allons voir comment capturer simplement une image grâce au module raspicam…

4 mois ago

Détecter les repères faciaux (facial landmarks) avec Dlib

Aujourd’hui nous allons utiliser Dlib et OpenCV pour détecter les repères faciaux (facial landmarks) dans…

2 ans ago

Reconnaissance d’objets en temps réel avec MobileNet

Nous avons vu dans un précédent article comment utiliser l’algorithme MobileNetSSD pour la reconnaissance d’objet…

2 ans ago

Reconnaissance d’objet avec MobileNet et OpenCV

Dans cet article, nous nous intéressons à l’utilisation des réseaux de neurones convolutifs dans le…

2 ans ago

Où est Charlie ?

Derrière ce titre un peu trompeur, nous n’allons pas trouver Charlie dans une image, mais…

2 ans ago