Python

Tutoriel : Traitement d’images avec Python et Pillow

Pillow est une bibliothèque Python très populaire qui permet de manipuler facilement des images. Dans ce tutoriel, nous allons explorer différentes fonctionnalités de Pillow pour charger, modifier et sauvegarder des images.

Installation

Pour commencer, assurez-vous d’avoir Python installé sur votre système. Vous pouvez télécharger la dernière version sur Python.org.

Ensuite, installez la bibliothèque Pillow en utilisant pip, le gestionnaire de packages de Python :

pip install Pillow
Charger une image

Commençons par charger une image existante. Vous pouvez utiliser n’importe quelle image au format pris en charge (PNG, JPEG, GIF, etc.).

from PIL import Image

# Charger l'image
image = Image.open("exemple.jpg")

# Afficher l'image
image.show()
Modifier une image

Pillow offre une grande variété de méthodes pour modifier les images. Voici quelques exemples courants :

Redimensionner une image
# Redimensionner l'image à une taille spécifique
largeur = 400
hauteur = 300
image_redimensionnee = image.resize((largeur, hauteur))

# Afficher l'image redimensionnée
image_redimensionnee.show()
Convertir une image en niveaux de gris
image_niveaux_de_gris = image.convert('L')
image_niveaux_de_gris.show()
Appliquer des filtres
from PIL import ImageFilter

# Appliquer un filtre de flou gaussien
image_flou = image.filter(ImageFilter.GaussianBlur(radius=2))
image_flou.show()
Faire pivoter une image
# Faire pivoter l'image de 90 degrés dans le sens des aiguilles d'une montre
image_pivot = image.rotate(90)
image_pivot.show()
Sauvegarder une image modifiée

Une fois que vous avez apporté les modifications souhaitées à votre image, vous pouvez les sauvegarder dans un nouveau fichier.

# Sauvegarder l'image modifiée
image_redimensionnee.save("nouvelle_image.jpg")

Voici quelques exemples plus avancés de traitement d’images avec Pillow :

1. Segmenter une image avec la méthode de clustering K-Means
from PIL import Image
import numpy as np
from sklearn.cluster import KMeans

# Charger l'image
image = Image.open("exemple.jpg")

# Convertir l'image en tableau numpy
image_array = np.array(image)

# Appliquer la méthode de clustering K-Means pour segmenter l'image en 5 couleurs
kmeans = KMeans(n_clusters=5)
kmeans.fit(image_array.reshape(-1, 3))
colors = kmeans.cluster_centers_.astype(int)
labels = kmeans.labels_
segmented_image = colors[labels].reshape(image_array.shape).astype(np.uint8)

# Afficher l'image segmentée
Image.fromarray(segmented_image).show()
2. Appliquer une transformation de perspective
from PIL import Image
import numpy as np

# Charger l'image
image = Image.open("exemple.jpg")

# Définir les coins de l'image d'origine
points_origine = np.array([[0, 0], [image.width, 0], [image.width, image.height], [0, image.height]])

# Définir les nouveaux coins après la transformation
nouveau_points = np.array([[50, 50], [image.width - 100, 100], [image.width, image.height - 50], [100, image.height - 100]])

# Calculer la matrice de transformation
matrice_transformation = cv2.getPerspectiveTransform(points_origine.astype(np.float32), nouveau_points.astype(np.float32))

# Appliquer la transformation à l'image
image_transformee = cv2.warpPerspective(np.array(image), matrice_transformation, (image.width, image.height))

# Afficher l'image transformée
Image.fromarray(image_transformee).show()
3. Détection de visages avec OpenCV et superposition de rectangles
import cv2

# Charger l'image en niveaux de gris
image_gris = cv2.cvtColor(cv2.imread("exemple.jpg"), cv2.COLOR_BGR2GRAY)

# Charger le classificateur de visage pré-entraîné
classificateur_visage = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

# Détecter les visages dans l'image
visages = classificateur_visage.detectMultiScale(image_gris, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

# Dessiner des rectangles autour des visages détectés
image_visages = cv2.imread("exemple.jpg")
for (x, y, w, h) in visages:
    cv2.rectangle(image_visages, (x, y), (x+w, y+h), (255, 0, 0), 2)

# Afficher l'image avec les visages détectés
Image.fromarray(image_visages).show()

Ces exemples illustrent quelques tâches plus avancées que vous pouvez réaliser avec Pillow en combinaison avec d’autres bibliothèques comme NumPy et OpenCV. Vous pouvez les utiliser comme point de départ pour explorer davantage le traitement d’images et créer des applications plus sophistiquées.

Voici quelques cas particuliers de traitement d’images avec Pillow :

1. Conversion d’une image en ASCII art
from PIL import Image

# Définir une chaîne de caractères représentant différentes nuances de gris
ascii_chars = "@%#*+=-:. "

# Charger l'image en niveaux de gris
image = Image.open("exemple.jpg").convert("L")

# Redimensionner l'image pour correspondre à la taille souhaitée pour l'ASCII art
largeur, hauteur = image.size
largeur_redimensionnee = 100
rapport_aspect = hauteur / float(largeur)
hauteur_redimensionnee = int(largeur_redimensionnee * rapport_aspect)
image = image.resize((largeur_redimensionnee, hauteur_redimensionnee))

# Convertir chaque pixel en caractère ASCII
ascii_art = ""
pixels = image.load()
for y in range(hauteur_redimensionnee):
    for x in range(largeur_redimensionnee):
        pixel = pixels[x, y]
        indice_char = pixel // 25  # Convertir la valeur de pixel (0-255) en un indice pour ascii_chars
        ascii_art += ascii_chars[indice_char]
    ascii_art += "\n"

# Afficher l'ASCII art
print(ascii_art)
2. Création d’une mosaïque d’images
from PIL import Image

# Charger les images
image1 = Image.open("image1.jpg")
image2 = Image.open("image2.jpg")

# Définir la taille de la mosaïque
largeur, hauteur = 800, 600

# Redimensionner les images pour qu'elles correspondent à la taille de la mosaïque
image1 = image1.resize((largeur // 2, hauteur))
image2 = image2.resize((largeur // 2, hauteur))

# Créer une nouvelle image pour la mosaïque
mosaique = Image.new("RGB", (largeur, hauteur))

# Placer les images dans la mosaïque
mosaique.paste(image1, (0, 0))
mosaique.paste(image2, (largeur // 2, 0))

# Afficher la mosaïque
mosaique.show()

3. Création d’une image avec des motifs répétés

from PIL import Image, ImageDraw

# Créer une nouvelle image
largeur, hauteur = 400, 400
image = Image.new("RGB", (largeur, hauteur), "white")

# Dessiner des motifs répétés
taille_motif = 20
draw = ImageDraw.Draw(image)
for x in range(0, largeur, taille_motif):
    for y in range(0, hauteur, taille_motif):
        if (x + y) % (taille_motif * 2) == 0:
            draw.rectangle([x, y, x + taille_motif, y + taille_motif], fill="black")

# Afficher l'image avec les motifs répétés
image.show()

Ces cas particuliers montrent quelques exemples uniques de ce que vous pouvez faire avec Pillow en dehors des opérations de traitement d’images standard. Vous pouvez expérimenter avec ces idées et les adapter à vos propres projets pour créer des effets visuels intéressants et des applications créatives.

Conclusion

Pillow est une bibliothèque puissante et flexible pour le traitement d’images en Python. Ce tutoriel a couvert les bases pour charger, modifier et sauvegarder des images, mais il existe de nombreuses autres fonctionnalités à découvrir. N’hésitez pas à explorer la documentation de Pillow pour en savoir plus sur ses capacités étendues.

Autres articles

Maîtriser l'utilisation de la méthode join en...
La méthode join en Python est un outil puissant pour...
Read more
Comment Gérer Efficacement le Budget Mariage avec...
Télécharger un modèle Excel automatisé de budget mariage automatisé avec...
Read more
Manipulation des Tableaux en Python avec Numpy
Numpy est une bibliothèque puissante et efficace pour la manipulation...
Read more
AZ

Recent Posts

Guide : Rédaction d’un Projet de Reprise d’Entreprise

Cet article vous aidera à mieux rédiger un projet de reprise d'entreprise. Ci-après les étapes…

2 heures ago

Fiche Méthode : Exprimer un Jugement sur Autrui

Exprimer un jugement sur une autre personne est une démarche délicate qui nécessite tact, respect…

2 heures ago

Exercices Corrigés en Gestion de Stock Dormant et en Transit

Exercice 1 : Détection du Stock Dormant Une entreprise a les données suivantes pour un…

3 heures ago

Stock en Transit : Définition, l’Identifier, et le Suivi dans Excel

Le stock en transit, aussi appelé stock en cours de transport, désigne les biens ou…

3 heures ago

Stock Dormant : Définition, l’Identier et le Suivi en utilisant Excel

Le stock dormant (aussi appelé stock obsolète ou inutilisé) désigne les articles ou les biens…

3 heures ago

Modèle de Fiche Hebdomadaire de Travail dans Excel

La fiche hebdomadaire de travail est un outil simple mais puissant pour organiser ses tâches,…

4 heures ago

This website uses cookies.