Tutoriels de Pythonia
Guides, IA, tutos et newsletter pour devenir une bête en programmation
🔔 Ne manquez pas la suite de cette série !
Inscrivez-vous pour être informé des prochains tutoriels.
Inscrivez-vous pour être informé des prochains tutoriels.
Mis à jour le March 8, 2023, 4:27 p.m.
Bienvenue dans cet article dédié aux manipulations de l'utilisation d'OpenCV. Dans cet article nous verrons les 5 points suivants:
1- Qu'est-ce qu'une image?
2- Comment accéder aux propriétés d'une image?
3-Comment modifier une image?
4- Comment appliquer des filtres à l'image?
Dans le domaine de l'informatique et du traitement d'images, une image est une représentation numérique d'un objet ou d'une scène visuelle. Cette représentation est généralement enregistrée sous la forme d'une matrice de pixels qui contient des valeurs numériques pour chaque pixel. Pour comprendre ce que cela signifie, il est important de décomposer les différentes parties d'une image numérique.
Tout d'abord, un pixel est le plus petit élément d'une image numérique. C'est l'atome de l'image si vous voulez. Chaque pixel est généralement représenté par trois valeurs numériques qui correspondent à l'intensité des couleurs primaires: rouge, vert et bleu (RGB), ou red-green-blue dans la langue de Shakespeare. Ces valeurs sont généralement stockées sous forme de nombres entiers compris entre 0 et 255, ce qui signifie qu'il y a 256 valeurs possibles pour chaque couleur primaire. En combinant ces trois valeurs, nous pouvons créer une large gamme de couleurs différentes qui peuvent être utilisées pour représenter une image.
Ensuite, une matrice de pixels est une grille rectangulaire qui contient des valeurs numériques pour chaque pixel. La taille de cette matrice dépend de la résolution de l'image, qui est mesurée en pixels par pouce (PPI) ou en points par pouce (DPI). Plus la résolution est élevée, plus l'image est détaillée et plus la matrice de pixels est grande.
Dans une image numérique, chaque pixel est placé à une position spécifique dans la matrice de pixels en fonction de sa position sur l'image. Les coordonnées de chaque pixel sont généralement représentées par deux valeurs: l'axe horizontal (X) et l'axe vertical (Y). La première rangée de pixels correspond aux coordonnées (0,0), et les coordonnées augmentent progressivement en fonction de la position du pixel sur l'image.
Enfin, une image numérique peut être stockée dans différents formats de fichiers, tels que JPEG, PNG, BMP, GIF, etc. Chaque format de fichier utilise une méthode spécifique pour stocker les valeurs numériques de l'image, ce qui peut affecter la qualité de l'image et sa taille de fichier.
L'une des fonctionnalités les plus courantes d'OpenCV consiste à accéder aux propriétés d'une image, telles que la largeur, la hauteur, le type d'image, etc. Ces propriétés sont importantes car elles peuvent aider à mieux comprendre l'image et à prendre des décisions en conséquence.
import cv2
# Charger l'image en utilisant cv2.imread()
img = cv2.imread('image.jpg')
# dimensions de l'image (hauteur, largeur et nombre de "dimensions")
hauteur, largeurs, couleurs = img.shape
print('Hauteur :', hauteur)
print('Largeur :', largeurs)
print('Nombre de dimensions :', couleurs)
# Accéder au nombre total de pixels de l'image
taille = img.size
print('Taille: ', taille)
# Accéder au type de données de l'image
dtype = img.dtype
print('Type de données :', dtype)
# Accéder à la valeur d'un pixel spécifique à partir de ses coordonnées (x, y)
x = 100
y = 200
pixel_value = img[y, x]
print('Valeur du pixel en ({}, {}) :'.format(x, y), pixel_value)
OpenCV permet même un "pixel access" qui est un accès pixel par pixel de l'image. Plus précisemment, c'est la capacité à lire et à modifier la valeur d'un pixel spécifique à partir de ses coordonnées (x, y) dans l'image. Cela peut être fait en utilisant le code suivant :
import cv2
# lire notre image
img = cv2.imread('/home/pythonia/Images/racedecien-083123-650-325.jpeg')
# coordonnées du pixel qui nous intéresse
x = 0
y = 0
# accéder au pixel tout en haut à gauche
pixel_value = img[y, x] # y est la coordonnée verticale, x est la coordonnée horizontale
print("La valeur originale du pixel: ", pixel_value)
# on met la valeur du pixel à blanc
img[y, x] = [255, 255, 255] # pour modifier la valeur du pixel
pixel_value_maj = img[y, x]
print("La valeur du pixel après modification: ", pixel_value_maj)
Le code est assez parlant et s'explique de lui-même. Nous avons vu comment changer la valeur d'un pixel. C'est bien pour la compréhension mais pas vraiment utile quand on veut faire des actions un peu plus cools. Du coup il va nous falloir agir sur l'image dans son entièreté. Comment faire?
On cherche à sauvegarder une image quand on a fait des modifications dessus.
import cv2
# Comme d'habitude on lit l'image:
nom = '/home/pythonia/Images/racedecien-083123-650-325.jpeg'
image = cv2.imread(nom)
# on convertit notre image en noir et blanc
im_nb = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Ensuite on accede aux propriétés de l'image
# ce que l'on entend par propriété c'est le terme dimension
dimensions = im_nb.shape
print("Voici les dimensions de notre image :", dimensions)
print("Pour plus de clarté:")
print("Hauteur en px: ", dimensions[0])
print("Largeur en px: ", dimensions[1])
cv2.imshow("Noir et Blanc", im_nb)
cv2.waitKey(0)
On entend par dimension simplement le fait de savoir si une image est en RGB (en couleur), ou en noir et blanc.
Lorsque vous travaillez avec des images, il peut être utile d'écrire du texte ou de dessiner des formes sur l'image pour ajouter des annotations ou des marqueurs. Ouvrez un nouveau script,
Nommez le comme bon vous semble et mettez le code suivant pour tracer une ligne:
import cv2
# Comme d'habitude on lit l'image:
nom = '/home/pythonia/Images/racedecien-083123-650-325.jpeg'
im = cv2.imread(nom)
# on convertit notre image en noir et blanc
im_nb = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
cv2.imshow("Couleur", im)
cv2.imshow("Noir et Blanc", im_nb)
cv2.waitKey(0)
print('image sauvegardée')
print('fin du script')
Aucun commentaire pour cet article.