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.
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
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()
Pillow offre une grande variété de méthodes pour modifier les images. Voici quelques exemples courants :
# 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()
image_niveaux_de_gris = image.convert('L')
image_niveaux_de_gris.show()
from PIL import ImageFilter
# Appliquer un filtre de flou gaussien
image_flou = image.filter(ImageFilter.GaussianBlur(radius=2))
image_flou.show()
# Faire pivoter l'image de 90 degrés dans le sens des aiguilles d'une montre
image_pivot = image.rotate(90)
image_pivot.show()
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 :
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()
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()
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 :
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)
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()
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.
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.
Cet article vous aidera à mieux rédiger un projet de reprise d'entreprise. Ci-après les étapes…
Exprimer un jugement sur une autre personne est une démarche délicate qui nécessite tact, respect…
Exercice 1 : Détection du Stock Dormant Une entreprise a les données suivantes pour un…
Le stock en transit, aussi appelé stock en cours de transport, désigne les biens ou…
Le stock dormant (aussi appelé stock obsolète ou inutilisé) désigne les articles ou les biens…
La fiche hebdomadaire de travail est un outil simple mais puissant pour organiser ses tâches,…
This website uses cookies.