1.
Activités de traitement d’images
1. Bibliothèque PIL (Python Imaging Library)
On installe maintenant le package Pillow utilisé dans les exemples de traitement d’images ci
dessous. Pour cela, le plus simple est de démarrer l’interpréteur de commandes [Link] puis de saisir la
commande pip install Pillow :
2. Activités de traitement d’images
Les activités présentés ici ont pour objectif de montrer l’utilisation des matrices dans le traitement d’images
numériques.
En effet, une image numérique (au niveau d’un périphérique comme l’écran) est une matrice de pixels (px).
On parle d’image matricielle.
Pour une image binaire (ou image en noir et blanc), les éléments de l’image sont représentés par des pixels
noirs (des 0 par exemple) et des pixels blancs (donc des 1).
Pour une image en couleurs, chaque pixel est associée une couleur, usuellement décomposée en trois
composantes primaires par synthèse additive : rouge vert bleu (RVB ou RGB en anglais).
Un pixel est donc codé sur un ou plusieurs bits, par exemple :
Par exemple, la petite image de Félix le Chat peut être représentée par une matrice de taille 35x35 :
La matrice correspondant à Felix le Cat.
-1-
Les fichiers peuvent enregistrer l’image sous forme d’un tableau des valeurs représentant les pixels (format
BMP par exemple), éventuellement comprimé (formats PNG ou JPEG), ou bien sous forme vectorielle
(format SVG par exemple), c’est-à-dire sous forme d’instructions permettant de reconstituer une image
matricielle. Dans ce cas, la couleur peut être également enregistrée sous forme vectorielle, avec comme
paramètres (teinte, saturation, lumière).
2.1. Activité n°1: manipuler une image avec PIL
Ce premier programme effectue les opérations basiques suivantes :
• afficher le format, la taille et le mode d’une image
• afficher les dimensions d’une image
• afficher une image
• calculer et afficher le nombre de pixels d’une image
• modifier la taille d’une image et en obtient une nouvelle
Code python
# Python3 ou 2 pour Windows : [Link]
# PIL (Python Imaging Library) (Pillow fork)
# Installation : pip install Pillow
# Documentation : [Link]
print("ACTIVITÉ 1")
# PIL est une bibliothèque de traitement d'image
import PIL;
print("PIL version ", PIL.__version__)
# Image est une classe (c'est un type Image)
# img est un objet de la classe Image
-2-
# la création d'un objet se nomme l'instanciation
# open() est une fonction (méthode) de la classe Image qui permet de charger un fichier image
from PIL import Image
img = [Link]("[Link]")
# Affichage de l'image
[Link]()
# format, size et mode sont des données (attributs) de la classe Image
print([Link], [Link], [Link])
# exemple : les modes courants sont "L" (luminance) pour les images en niveaux de
gris, "RGB" pour les images en couleurs vraies et "CMYK" pour les images pour
l'imprimerie (quadrichromie)
print ("Fichier :", [Link])
print("2. Calculez le nombre de pixels de cette image.")
# Affichage des dimensions de l'image
print("L =", [Link], "x H =", [Link])
# Calcul et Affichage du nombre de pixels de l'image
print("Nombre de pixels =", ([Link]*[Link]) , "pixels")
# resize() est une fonction (méthode) de la classe Image qui permet de modifier la taille d'une image et d'en
#obtenir une nouvelle
# img2 est un objet de la classe Image
img2 = [Link]((228,192))
# save() est une fonction (méthode) de la classe Image qui sauvegarder l'image dans un
#fichier (ici, l'extension précisera le format de l'image)
[Link]("[Link]")
[Link]("[Link]")
print ([Link], [Link], [Link])
print ("Nombre de pixels =", "L =", [Link], "x H =", [Link], "=",([Link]*[Link]) ,
"pixels")
[Link]()
# size est un tuple (les tuples sont des séquences qu'on ne pourra plus modifier)
size = (144,96) # les parenthèses ne sont pas obligatoires
width, height = size
print (size, width, height)
img3 = [Link](size)
[Link]("[Link]")
print ([Link], [Link], [Link])
-3-
print ("Nombre de pixels =", "L =", [Link], "x H =", [Link], "=",([Link]*[Link]) ,
"pixels")
[Link]()
# convertir l'image au GRIS sous un nouveau nom pomme_G en format png
img4=[Link]("L")
#[Link]()
[Link]("pomme_G.png")
Appliquer un filtre
Filtres disponibles
Pillow propose une variété de filtres d'image prédéfinis via son module ImageFilter, qui peuvent être
appliqués à une image à l'aide de la méthode [Link]().
• Flou (Blurring): BLUR, BoxBlur, GaussianBlur.
• Affûtage et finitions (Sharpening and
Details: SHARPEN, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE.
• Détection des contours/Effets (Edge Detection/Effects): CONTOUR, EMBOSS, FIND_EDGES.
• Lissage (Smoothing): SMOOTH, SMOOTH_MORE.
• Réduction du bruit (Noise Reduction): MedianFilter, ModeFilter.
from PIL import Image,ImageFilter
img5 = [Link]("[Link]")
#img5=[Link]([Link])
#img5=[Link](ImageFilter.FIND_EDGES)
#img5=[Link](ImageFilter. GaussianBlur(10))
img5=[Link](ImageFilter. GaussianBlur(20))
[Link]("pomme_f.jpg")
[Link]()
Principales fonctionnalités:
• Affichage et informations : [Link](), [Link], [Link].
• Transformation géométrique : rotate(), transpose(), resize(), crop().
• Traitement de pixels : getpixel(), putpixel(), [Link]().
-4-
• Filtres : Utilisation du module ImageFilter (contour, flou, renforcement).
• Conversion de mode : convert('L') pour le gris, convert('RGBA') pour la transparence.
Rogner une image
print("Activité 2")
#Pour découper une partie spécifique de l’image, utilisez crop() :
from PIL import Image
img = [Link]("[Link]")
# Définir une zone de rognage
# Définir la zone (left, upper, right, lower)
# Exemple: recadrer un carré de 150x150 à partir de la position (0, 0)
box = (0, 0, 150, 150)
img_c = [Link](box)
img_c.show()
img_c.save("pomme_c.jpg")
Points clés du recadrage (Crop) :
• Syntaxe : [Link]((left, upper, right, lower)).
• Système de coordonnées : L'origine (0,0) est en haut à gauche. Les valeurs augmentent vers la droite et le
bas.
• Dimensions : right et lower représentent les coordonnées limites, pas la largeur/hauteur depuis le point de
départ.
• Formats : Pillow (PIL Fork) supporte PNG, JPEG, GIF, BMP, TIFF.
Rotation et retournement
Pillow vous permet également de faire pivoter ou de retourner l’image :
print("Activité 3")
from PIL import Image
img = [Link]("[Link]")
# Rotation de l'image
#img_rot = [Link](45)
img_rot = [Link](90)
-5-
#img_rot.show()
# Retourner l'image horizontalement
img_ret = [Link](Image.FLIP_LEFT_RIGHT)
#img_ret = [Link](Image.FLIP_TOP_BOTTOM)
img_ret.show()
Créer une nouvelle image
Vous pouvez créer une nouvelle image à partir de zéro :
Détails des paramètres :
• mode : Le mode de couleur, par exemple "RGB" (couleur), "L" (niveaux de gris), ou "RGBA" (couleur avec
transparence).
• taille : Un tuple (largeur, hauteur) en pixels.
• couleur : Couleur de fond (nom en anglais comme "red", ou code hexadécimal).
Pour manipuler les pixels après création, on utilise putpixel((x, y), couleur).
print("Activité 4")
from PIL import Image
#Créer une image RGB de 100x100 pixels, fond rouge
#img_n = [Link]('RGB', (100, 100), 'red')
#Créer une image RGB de 200x100 pixels, fond bleu
img_n = [Link]("RGB", (200, 100), "blue")
img_n.show()
Manipuler les pixels d’une image
La bibliothèque Pillow (PIL) en Python est l'outil standard pour manipuler les pixels d'une image. On
utilise [Link]() pour charger l'image, getpixel((x, y)) pour lire la couleur d'un pixel (RGB/RGBA),
et putpixel((x, y), couleur) pour la modifier. Le parcours de l'image se fait généralement via une double
boucle for sur la hauteur et la largeur.
Activite n° 5 : Exemple de manipulation de pixels (inversion de couleurs) :
print("Activité 5")
from PIL import Image
# 1. Ouvrir l'image
-6-
img = [Link]('[Link]')
pixels = [Link]() # Chargement rapide en mémoire
# 2. Obtenir les dimensions
largeur, hauteur = [Link]
# 3. Parcourir et modifier les pixels
for x in range(largeur):
for y in range(hauteur):
r, g, b = pixels[x, y]
# Inversion (négatif)
pixels[x, y] = (255 - r, 255 - g, 255 - b)
# 4. Sauvegarder
[Link]('image_modifiee.jpg')
Concepts clés de manipulation :
• Installation : pip install Pillow.
• Accès direct : [Link]() est préférable à getpixel dans les boucles pour la rapidité.
• Couleurs : Les pixels sont représentés par des tuples (Rouge, Vert, Bleu) ou (R, G, B, Alpha) pour la
transparence.
• Méthodes alternatives : La méthode .point() permet d'appliquer une transformation à tous les pixels d'un
coup (ex: luminosité).
• Coordonnées : Le point (0,0) est situé en haut à gauche de l'image.
Activite n° 6 : modifier la luminosité d'une image) :
print("Activité 6")
from PIL import Image
# 1. Ouvrir l'image
img = [Link]("[Link]")
# 2. Augmenter la luminosité (multiplier chaque pixel par 1.5)
# La fonction point() applique une transformation à chaque pixel
L_img = [Link](lambda i: i * 1.5)
# 3. Sauvegarder ou afficher
L_img.show()
L_img.save("image_eclaircie.jpg")
-7-
Points clés :
• [Link](lambda i: i * facteur) : Idéal pour ajuster la luminosité globale. Si le facteur > 1, l'image est
éclaircie ; s'il est < 1, elle est assombrie.
• putpixel((x, y), (r, g, b)) : Modifie un seul pixel aux coordonnées (ݔ, )ݕavec de nouvelles valeurs RGB.
• Limites : Les valeurs de pixels sont comprises entre 0 et 255. Pillow gère automatiquement le plafonnement
(clipping) si la valeur dépasse 255 (devient 255) ou est inférieure à 0 (devient 0).
Activite n° 7 : Ajuster la luminosité, le contraste, la couleur et la netteté des images.
Le module ImageEnhance de la bibliothèque Pillow (PIL) en Python permet d'ajuster facilement la
luminosité, le contraste, la couleur et la netteté des images. Il utilise des facteurs multiplicatifs :
1.0 représente l'image originale, 0.5 une réduction de l'effet, et 2.0 une augmentation.
print("Activité 7")
from PIL import Image, ImageEnhance
# 1. Ouvrir l'image
img = [Link]("[Link]")
# 2. Améliorer la luminosité (Brightness)
img7 = [Link](img)
b_img = [Link](1.5) # +50% de luminosité
#b_img.show()
# 3. Améliorer le contraste (Contrast)
img8 = [Link](img)
cont_img = [Link](1.8) # +80% de contraste
#cont_img.show()
# 4. Ajuster la couleur (Color/Saturation)
img9 = [Link](img)
col_img = [Link](0.5) # Réduire la couleur (plus terne)
#col_img.show()
# 5. Améliorer la netteté (Sharpness)
img10 = [Link](img)
sh_img = [Link](2.0) # Augmenter la netteté
sh_img.show()
# Sauvegarder le résultat
sh_img.save("image_nette.jpg")
-8-
Méthodes principales de ImageEnhance
• Brightness(image) : Ajuste la luminosité.
• Contrast(image) : Ajuste le contraste.
• Color(image) : Ajuste la saturation/couleur.
• Sharpness(image) : Ajuste la netteté.
• enhance(factor) : Applique la modification (1.0 = original, >1 = augmentation, <1 = diminution).
Activite n° 8 : La séparation des canaux de couleur (Rouge, Vert, Bleu - RVB)
La séparation des canaux de couleur (Rouge, Vert, Bleu - RVB) avec la bibliothèque Pillow (PIL) en Python
est effectuée via la méthode .split(). Cette fonction décompose une image PIL en ses composants
individuels, permettant un traitement séparé de chaque canal.
rouge, vert, bleu = [Link]()
[Link]()
[Link]()
[Link]()
print("Activité 8")
from PIL import Image
# Charger l'image
img = [Link]("[Link]")
# Séparation des canaux
rouge, vert, bleu = [Link]()
# Afficher ou sauvegarder les canaux
[Link]() # Affiche le canal rouge en niveaux de gris
[Link]() # Affiche le canal vert en niveaux de gris
[Link]() # Affiche le canal bleu en niveaux de gris
Points Clés
• .split() : Renvoie une liste d'images individuelles pour chaque canal.
• .merge() : Peut être utilisé pour reconstruire l'image après modification.
-9-
• .getpixel() : Permet d'accéder aux valeurs R, V, B d'un pixel spécifique directement.
Activite n° 9 : Lecture en mode brouillon
La méthode [Link]() dans la bibliothèque Pillow (PIL) en Python est utilisée pour obtenir une version
"brouillon" ou basse résolution d'une image. Elle permet de charger rapidement les dimensions et le mode de
l'image sans charger les données de pixels complètes, idéal pour des opérations de traitement rapide.
print("Activité 9")
from PIL import Image
# Ouvrir l'image
img = [Link]('[Link]')
# Obtenir une version "draft" (brouillon)
# Cela modifie généralement le mode et/ou la taille de l'image
[Link]("L", (100, 100)) # Exemple: convertir en niveaux de gris ("L") et limiter la taille
[Link]()
Points clés :
• Performance : Pillow's documentation indique que draft() est utile pour optimiser le traitement en ignorant
des données inutiles.
• Utilisation : Elle est souvent utilisée pour prévisualiser ou analyser une image avant de la manipuler.
• Modification : La méthode modifie l'objet image en place pour la rendre plus légère.
En résumé, [Link]() est une méthode de Pillow pour optimiser la mémoire et le temps de calcul en
travaillant sur une version allégée de l'image.
print("Activité 10")
from PIL import Image
with [Link]("[Link]") as im:
print("original =", [Link], [Link])
[Link]("L", (50, 50))
print("draft =", [Link], [Link])
results
- 10 -
Activité 10
('original =', 'RGB', (228, 192))
('draft =', 'L', (114, 96))
Activite n° 11 : Collage d’une image dans une autre
Pour coller une image dans une autre avec la bibliothèque Pillow (PIL) en Python, utilisez la
méthode paste() après avoir ouvert les images avec [Link](). La syntaxe de base
est image_fond.paste(image_a_coller, (x, y)), où (x, y) représente les coordonnées du coin supérieur gauche.
Étapes clés :
• Importer : from PIL import Image.
• Ouvrir : img1 = [Link]('[Link]') et img2 = [Link]('[Link]').
• Coller : [Link](img2, (50, 50)) pour coller img2 sur img1 aux coordonnées (50, 50).
• Sauvegarder : [Link]('[Link]')
print("Activite 11")
from PIL import Image
# 1. Ouvrir l'image de fond (destination)
fond = [Link]('[Link]')
# 2. Ouvrir l'image à coller (source)
image_a_coller = [Link]('[Link]')
# 3. Définir la position (x, y)
position = (70, 70)
# 4. Coller l'image (sans masque/transparence)
[Link](image_a_coller, position)
# 5. Sauvegarder le résultat
[Link]('image_finale.jpg')
[Link]()
- 11 -