0% ont trouvé ce document utile (0 vote)
25 vues7 pages

Manipulation d'images avec OpenCV

Ce document présente des techniques de manipulation d'images à l'aide de la bibliothèque OpenCV, incluant le chargement, l'affichage, la conversion en niveaux de gris, et la sauvegarde d'images. Il aborde également des opérations sur les pixels comme le réglage de la luminosité et du contraste, ainsi que la fusion d'images et l'application de filtres pour le lissage et l'accentuation du contraste. Des exemples de code Python illustrent chaque technique, facilitant la compréhension et l'application des concepts.

Transféré par

Kamelia Hamitouche
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
25 vues7 pages

Manipulation d'images avec OpenCV

Ce document présente des techniques de manipulation d'images à l'aide de la bibliothèque OpenCV, incluant le chargement, l'affichage, la conversion en niveaux de gris, et la sauvegarde d'images. Il aborde également des opérations sur les pixels comme le réglage de la luminosité et du contraste, ainsi que la fusion d'images et l'application de filtres pour le lissage et l'accentuation du contraste. Des exemples de code Python illustrent chaque technique, facilitant la compréhension et l'application des concepts.

Transféré par

Kamelia Hamitouche
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Faculté des sciences et de la technologie

Master : traitement et analyse d'images et de la parole

Chapitre II : Manipulation des images par OpenCV

1 - Chargement et affichage d'une image a partir d'un fichier :


Dans cette section, nous allons voir comment:
• Charger une image (en utilisant la fonction imread)
• Afficher une image dans une fenêtre OpenCV (à l'aide de la fonction imshow)

Supposons que le préparatoire de travail contient le fichier image « house.tiff » . Pour le lire par
OpenCV, on exécute les instructions suivantes :

>> from cv2 import *


>> image = imread("house.tiff",CV_LOAD_IMAGE_COLOR)
>> imshow('affichage de l\'image',image)
>> waitKey(0)

Explication
– La première instruction appel le module OpenCV (toutes les fonctions) ;
– L'instruction imread charge une image à partir le fichier « house.tiff ». Le deuxième
argument spécifie le format de l'image. Cela peut être:
• CV_LOAD_IMAGE_UNCHANGED : charge l'image telle qu'elle est
• CV_LOAD_IMAGE_GRAYSCALE : charge l'image en niveau de gris
• CV_LOAD_IMAGE_COLOR :charge l'image en format RGB

– Après avoir vérifié si les données d'image ont été chargés correctement, on l'affiche en
utilisant la fonction imshow.

I-1
– Enfin, pour mettre à jour le contenu de la fenêtre OpenCV avec une nouvelle image, on utilise
la fonction imshow. Pour ce faire, on indique le nom de la fenêtre OpenCV pour mettre à jour
et l'image à utiliser au cours de cette opération:
imshow('nom_de_la_fenetre',image)
– Parce qu'on veut que notre fenêtre s'affiche jusqu'à ce que l'utilisateur appuie sur une touche,
nous utilisons la fonction waitKey dont le seul paramètre est le temps faut-il attendre une
intervention de l'utilisateur (mesuré en millisecondes). Zéro signifie d'attendre indéfiniment.

Remarques :
- OpenCV supporte les formats d'image suivants :
Windows bitmap (bmp), portable image formats (pbm, pgm, ppm), Sun raster (sr, ras), JPEG (jpeg,
jpg, jpe), JPEG 2000 (jp2), TIFF (tiff, tif) et portable network graphics (png).
- Pour connaître la taille de l'image, on utilise la méthode shape de la donnée image comme suite :
>> print "size of image: ", image.shape
- Il vaut mieux mettre la suite des instructions précédente dans fichier texte afficher_image.py, pour
l'utiliser au fur et à mesure de nos besoins.

Exemple

from cv2 import *


import sys

if len(sys.argv)!=2:
print "Usage : python afficher_image.py <fichier>"

else:
image = imread(sys.argv[1],CV_LOAD_IMAGE_COLOR)
if (image == None):
print "erreur d\'ouverture du fichier image"
else:
imshow('affichage de l\'image',image)
waitKey(0)

Pour exécuter ce code , il suffit de taper (dans le terminal)


~$ python afficher_image.py house.tiff

2 - Modifier et sauvegarder une image


Dans cette section, nous allons voir comment:
• Charger une image en utilisant la fonction imread
• Transformer une image en niveaux de gris à partir de BGR format en utilisant cvtColor
• Enregistrez votre image transformée dans un fichier sur le disque en utilisant imwrite

I-2
# Ergistrer ce code dans fichier modifier_image.py
from cv2 import *
image = imread('house.tiff')
image_gris = cvtColor(image, COLOR_BGR2GRAY)
imwrite('image_gris.jpg',image_gris)
imshow('image_couleur',image)
imshow('image_gris',image_gris)
waitKey(0)
destroyAllWindows()

Explication
- La fonction cvtColor convertir notre image RGB en format niveaux de gris. Elle prend comme
arguments:
• une image source (image)
• une image de destination ou l'image convertie (image_gris)
• un paramètre qui indique quel genre de transformation sera effectuée. Dans ce cas, nous
utilisons CV_BGR2GRAY
- La fonction imwrite converte et sauvegarde la nouvelle image (image_gris) sur le disque. Dans le
programme précédent le format JPEG est utilisé dans la conversion.
– La fonction destroyAllWindows() : on peut appeler destroyWindow() ou destroyAllWindows()
pour fermer la fenêtre et de-allouer l'utilisation de la mémoire associée. Pour un programme
simple, on'a pas vraiment besoin d'appeler ces fonctions parce que toutes les ressources et les
fenêtres de l'application sont fermés automatiquement par le système d'exploitation à la sortie.

I-3
3- Modification du contraste et de la luminosité d'une image

Un opérateur général de traitement d'image est une fonction qui prend une ou plusieurs images en
entrée et produit une image de sortie.
Les transformations d'image peuvent être considérés comme:
- Des opérateurs ponctuels (transformations pixels)
- Des opérateurs de voisinage (zone )
Transformations Pixels
Dans ce genre de transformation de traitement de l'image, la valeur de chaque pixel de sortie dépend
uniquement de la valeur de pixel d'entrée correspondante comme et le réglage de la luminosité et du
contraste d'une image.
Exemple : Réglages de la luminosité et de contraste
Deux processus ponctuels couramment utilisés sont la multiplication et l'addition avec une constante:

g (i , j)=α . f (i , j)+β

où i et j indique que la pixel est située dans le i-ème ligne et j-ème colonne.
Les paramètres α >0 et β sont souvent appelés les paramètres de gain et de biais; ou paramètres de
contrôle de contraste et de la luminosité respectivement.

Code Python

# coding: latin­1
from cv2 import *
from numpy import *
alpha = float(input(" Entrer la valeur de alpha [1.0­3.0]: "))#contraste
beta = int(input("Entrer la valeur de beta [0­100]: ")) # luminosité

image = imread('rice.tif')
mul_image = multiply(image,array([alpha])) # mul_image = image*alpha
image1 = add(mul_image,array([beta])) # image1 = image*alpha +
beta
#image1 = image*alpha + beta
imshow('image_originale', image)
imshow('image_nouvelle',uint8(image1))
waitKey(0)
destroyAllWindows()

4- Fusion (mélange) de deux images


Dans cette section on va apprendre comment fusionnner linéairement des images. Un opérateurs
pixels dyadique (deux entrées) intéressant est l'opérateur de mélange linéaire:

g ( x)=(1−α) f 0 ( x)+α f 1 ( x)

I-4
En faisant varier α de 0 à 1 cet opérateur peut être utilisé pour effectuer une fusion temporelle entre deux
images ou des vidéos :

Code Python

from cv2 import *


from numpy import *
alpha = float(input("Entrer la valeur de alpha "))

if 0<=alpha<=1:
beta = 1.0 ­ alpha
gamma = 0.5

img1 = imread('LinuxLogo.png')
img2 = imread('WindowsLogo.png')

if img1==None:
print "erreur image1 "
elif img2==None:
print "erreur image2 "
else:
dist = addWeighted(img1,alpha,img2,beta,gamma)
# dist = uint8(alpha*(img1)+beta*(img2))
imshow('distination',dist)
waitKey(0)
destroyAllWindows()
else:
print "valeur de alpha doit etre entre 0 et 1"

Pour α=0.5 nous obtenons le resultat suivant :

I-5
5- Opérateurs de voisinage (zone ) sur les images
Dans ces opérateurs on recalcule chaque valeur des pixels d'une image selon une matrice de masque
(ou noyau). Ce masque contient des valeurs qui va ajuster l'influence de pixels voisins (et le pixel en
cours) sur la nouvelle valeur de pixel. D'un point de vue mathématique, nous faisons une moyenne
pondérée, comme suit :
Exemple 1 : accentuation du contraste de l'image (sharpening)
Dans ce cas, on veut appliquer pour chaque pixel de l'image la formule suivante:

Pour implémenter cet opérateur par OpenCV on utilise la la fonction filter2D :

Code Python

from cv2 import *


from numpy import *

img = imread('house.tiff')

masque = array([ [0.,­1.,0.],


[­1.,5.,­1.],
[0.,­1.,0.] ])
img1 = filter2D(img,­1,masque)
imshow('originale',img)
imshow('nouvelle',img1)
waitKey(0)
destroyAllWindows()

I-6
Explication
La fonction filter2D fait la convolution entre l'image et le masque. Elle prend comme arguments:
• l'image source (img)
• une matrice de masquage (masque) de type réel
• un parametre de profondeur -1, signifie que la estination a une profondeur initiale (8 bits)
• une image de destination ou l'image convertie (img1)
Dans cette exemple on voit clairement que ce type de masquage est un filtrage pass-haut.

Exemple 2 : lissage d'une image (smoothing)


Si on utilise un autre masque, comme ceci :

Nous obtenons un résultat inverse; l'image résultante devient floue (filtrage pass-bas) :

Il existe d'autre type de filtres de lissage d'image tels que le filtrage Gaussien et le filtrage median.

Exemple:
img1 = GaussianBlur(img,(3,3),0) # filtre Gaussien
img1 = medianBlur(img,5) # filtre median

I-7

Vous aimerez peut-être aussi