Traitement d'images
Introduction
Nous allons nous intéresser dans ce TP à la création et à la modification d'images numériques.
En python, on utilise la libraire PIL (pour Python Imaging Library) pour manipuler les images.
Pour charger un objet de type Image, on peut utilise le code suivant.
| đ Code Python | |
|---|---|
1 2 3 | |
Ceci affecte Ă la variable img un objet de type Image que l'on peut manipuler Ă l'aide des fonctions python du module Image.
Une image numĂ©rique peut ĂȘtre vue comme une tableau 2D (on dit aussi matrice) de pixels. Une image est dite de dimension $m \times n$ si le tableau de pixel qui la reprĂ©sente est constituĂ© de $m$ lignes de $n$ pixels. Chaque pixel de l'image est repĂ©rĂ© par ses coordonnĂ©es.
Attention, les conventions changent par rapport aux mathématiques : l'origine du repÚre est le coin supérieur gauche de l'image, et les ordonnées sont orientées vers le bas.
![]()
Une image peut-ĂȘtre manipulĂ©e selon deux modes : le mode niveaux de gris (mode "L") et le mode couleur (mode "RGB").
- En mode noir et blanc, la couleur de chaque pixel est décrite par un nombre écrit sur $8$ bits.
0représente la couleur noire,255représente la couleur blanche. -
En mode couleur, la couleur de chaque pixel est décrite par un triplet de nombres
(r, g, b)Ă©crits sur $8$ bits qui indique comment mĂ©langer les trois couleurs rouge (râed), vert (gâreen) et bleu (bâlue).Par exemple,
(255, 0, 0)signifie un rouge pur (rouge au maximum, vert et bleu absents).(0, 255, 0)est un vert pur.(0, 0, 255)est un bleu pur.(255, 255, 255)représente le blanc (toutes les couleurs au maximum).(0, 0, 0)représente le noir (absence de toutes les couleurs).(128, 128, 128)serait un gris moyen.
Par exemple, le code ci-dessous créé une image de dimensions $4\times 2$ au format noir et blanc et modifie le pixel de coordonnées (3, 1) afin que celui-ci soit blanc. Enfin, on sauvegarde l'image dans le fichier exemple.png.
| đ Code Python | |
|---|---|
1 2 3 | |

On donne dans le tableau ci-dessous la liste de toutes les fonctionnalités utiles du module Image.
| Instruction | Description |
|---|---|
nom_variable = Image.open("chemin_fichier") |
Ouverture dâun fichier image |
nom_variable.show() |
Affiche l'image nom_variable |
nom_variable.mode |
Mode de lâimage : "L" en niveaux de gris, "RGB" en couleurs |
nom_variable.format |
Format de lâimage: "PNG", "PPM", âŠâ |
nom_variable.size |
Dimensions de lâimage sous la forme dâun tuple (largeur,hauteur) |
nom_variable.save("nom_fichier") |
Sauvegarde l'image dans nom_fichier |
nom_variable = Image.new(mode,(l,h) |
CrĂ©ation dâune image dans le mode de dimensions (l, h) |
nom_variable.getpixel((x,y)) |
Pixel de coordonnées (x,y). Un nombre ou un triplet, suivant le mode de l'image |
nom_variable.putpixel((x,y), valeur) |
Ăcriture de la valeur dans le pixel de coordonnĂ©es (x, y) |
Exercices
Premier exemple
Récupérer le fichier "baboon.png" sur le github du cours.
Créer un nouveau fichier tp.py et y recopier les lignes suivantes.
| đ Code Python | |
|---|---|
1 2 | |
- Déterminer dans la console, le format, le mode et les dimensions de l'image.
-
Lire et essayer de comprendre le code suivant, quel va ĂȘtre l'image produite ? Puis, tester ce code.
đ Code Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14
from PIL import Image im = Image.open("baboon.png") largeur, hauteur = img.size # L'instruction suivante crĂ©e une nouvelle Image en mode RGB # et qui possĂ©de les mĂȘmes dimensions que img img2 = Image.new("RGB", img.size) for y in range(hauteur): #parcours des lignes for x in range(largeur): #parcours des colonnes d'une ligne pixel = im.getpixel((x, y)) im2.putpixel((x, y),(pixel[0], 0, 0)) img2.show() -
Modifier le programme qu'il créé une image qui ne garde que la composante en bleu de l'image et affiche cette image.
TV brouillée
Ecrire un programme qui crĂ©e une image en mode "RGB" de dimension $512\times 512 $ pixels. Pour chacun des pixels, la couleur correspondra Ă trois nombres diffĂ©rents tirĂ©s au hasard, Ă lâaide de la fonction randint du module random.
| đ Code Python | |
|---|---|
1 2 3 | |
Shades of Grey
Pour convertir une image couleur en niveau de gris, un pixel reprĂ©sentĂ© par ses composantes (r, g, b) doit ĂȘtre remplacĂ© par un pixel Ă une seule composante codĂ© par un nombre entier compris entre 0 et 255 et appelĂ© luminance.
Une premiĂšre approche est dâutiliser la moyenne $m = \dfrac{r + g + b}{3}$ pour calculer la luminance.
Ecrire un programme qui crĂ©e une image en mode "L" correspondant Ă la conversion en niveau de gris de lâimage "baboon.png".
Mona Crie
Récupérer les fichiers "mona_fond.png" et cri.jpg depuis le github du cours.
- Quel est le code RGB de la couleur des pixels verts dans lâimage
mona_fond.png? - Ecrire un programme créant une image
mona_cri.png. Cette image devra contenir une incrustation de Mona Lisa dans le tableau Le Cri : chacun des pixels verts de Mona Lisa doit ĂȘtre remplacĂ© par un pixel du Cri de mĂȘmes coordonnĂ©es.
Inversion
Pour inverser les contrastes dâune image en niveaux de gris, il suffit dâappliquer Ă chaque pixel x la valeur 255 â x. Le blanc devient noir et vice-versa.
ComplĂ©ter dans le programme ci-dessous le code de la fonction inverser_gris pour quâil prenne en argument une Image en niveau de gris, et renvoie une Image dont les contrastes sont inversĂ©s.
| đ Code Python | |
|---|---|
1 2 3 4 5 6 7 8 9 10 | |
On pourra utiliser le fichier "boats.png" du dépÎt github afin de tester la fonction.
Noir et blanc
Pour transformer une image en niveaux de gris en une image en noir et blanc, on convient dâun seuil s (avec $0 \leq s \leq 255$) et on remplace chaque pixel de valeur p soit par 0 si $p \leq s$ soit par 255 sinon.
- Ecrire une fonction
convertir_nb, qui prend en argument une image et un seuil. Elle renvoie l'image convertie avec la mĂ©thode de l'Ă©noncĂ©, sans modifier l'image originale. - Tester cette fonction sur lâimage
"boats.png"pour différentes valeurs de seuil. - Ecrire une fonction
convertir_gris, qui prend en argument une image en mode RGB et renvoie une image en niveau de gris. Pour convertir en niveau de gris un pixel de code(r,g,b)on calcule la luminancelavec la formule $l=0,299r+0,587g+0,114b$ . - Appliquer la fonction
convertir_grispuisinverser_grispuisconvertir_nbavec un seuil de130Ă lâimage"baboon.png".
Drapeau Cameroun
Le drapeau du Cameroun est un drapeau tricolore dont les couleurs sont vert (0, 122, 94), rouge (208, 20, 37) et jaune (252, 208, 23).

Créer et afficher une image de dimensions $640 \times 429$ correspondant au drapeau camerounais (sans l'étoile du milieu).