Vous êtes sur la page 1sur 2

Rapport projet traitement d’images

Réalisé par :

Avant de commencer la détection des couleurs, j’ai effectué la conversion de l’espace BGR (l’espace
traité par opencv) vers l’espace HSV, l’espace qui nous permet de manipuler les composantes des
matrices sans changer l’image entière.

L'espace couleur HSV est constitué de 3 matrices, HUE, SATURATION et VALUE. HUE représente la
couleur, SATURATION représente la quantité à laquelle cette couleur est mélangée avec du blanc et
VALUE représente la quantité à laquelle cette couleur est mélangée avec du noir.

Dans mon travail, j'ai considéré que l'objet vert a une teinte, une saturation et une valeur comprises
entre 25-102, 52-255 et 72-255 respectivement. Et pour le bleu on a les valeurs comprises entre 94-120,
80-255 et 2-255. Ici, la teinte est unique pour chacune des distributions de couleurs spécifiques de
l’objet que je veux détecter. Mais la SATURATION et la VALEUR peuvent varier en fonction des
conditions d'éclairage de l’environnement traité.

Dans cet exemple, je vais traiter une vidéo avec un objet de couleur bleue et créer une vidéo segmentée
binaire en seuillant la couleur bleue : la zone de couleur bleue de la vidéo sera affectée à '1' et les autres
zones seront affectées à '0' dans l'image binaire de sorte qu’on verre une tache blanche partout où
l'objet bleu est détecté.

Figure 1 seuillage couleur bleue

Après le seuillage de l'image, nous remarquons de petits objets blancs isolés éparpillés. Cela est dû à des
bruits dans l'image ou aux petits objets réels qui ont la même couleur que notre objet principal. Ces
petites taches blanches inutiles peuvent être éliminées en appliquant une ouverture morphologique.
L'ouverture morphologique peut être réalisée par une érosion, suivie d'une dilatation avec le même
élément structurant.
Figure 2 avant d'appliquer l'ouverture Figure 3 après appliquer l'ouverture

Pour détecter les formes, j’ai utilisé la fonction cv2.FindContours qui retourne les contours dans l’image.
Pour réduire le niveau de bruit de l'image originale, j'ai lissé l'image originale avec un noyau gaussien.

Puis j’ai utilisé la fonction cv2.ApproxPoly() qui fait l’approximation des contours pour avoir des lignes
droites

Dans cet exemple, j'ai utilisé cv2.ContourPerimeter(contour)*0.01 comme argument de


cv2.ApproxPoly().

Il peut encore y avoir de très petites formes formées à cause du bruit. C'est pourquoi tous les formes
dont la surface est inférieure à 400 pixels sont filtrés.

En utilisant les contours avec opencv, nous pouvons obtenir une séquence de points de sommets de
chaque tache blanche. On obtiendra alors 3 points ou sommets pour un triangle, 4 sommets pour un
rectangle et on considérera que les objets avec plus de 10 sommets sont des disques.

Finalement on obtient le résultat suivant :

Vous aimerez peut-être aussi