Manipulation de pixels avec PIL
Dans ce cours, nous allons explorer les fonctions essentielles de la bibliothèque Pillow (anciennement PIL) pour manipuler les pixels d’une image en Python. Vous apprendrez à lire et écrire…

Après l'exécution de `img.putpixel((250,250),(255,0,0))`, quelle sera la couleur du pixel (250,250) ?
Dans la boucle qui échange les canaux couleur, quelle valeur est assignée à `n_r` ?
Quel est l'effet de l'instruction `n_v = 255 - v` dans le script de négatif ?
Dans le code de conversion en niveaux de gris, comment est calculée la valeur `gris` ?
Quel sera le résultat final de l'image après l'exécution du script de négatif sur chaque pixel ?
Quel problème logique se trouve dans le commentaire du script qui échange les canaux couleur ?
Dans le script de conversion en négatif, quelle valeur sera assignée à `n_b` pour un pixel dont le bleu vaut 100 ?
Quel est le rôle de la double barre oblique `//` dans le calcul de la variable `gris` ?
Après le script de permutation des canaux, quelle couleur dominante aura le pixel initialement rouge pur (255,0,0) ?
Manipulation de pixels avec la bibliothèque Pillow (PIL)
Dans ce cours, nous allons explorer les fonctions essentielles de la bibliothèque Pillow (anciennement PIL) pour manipuler les pixels d’une image en Python. Vous apprendrez à lire et écrire les composantes couleur d’un pixel, à créer des effets de négatif, à convertir une image en niveaux de gris, et à échanger les canaux couleur. Chaque section s’appuie sur les questions du quiz afin de consolider vos connaissances.
1. Accéder aux composantes d’un pixel
La méthode getpixel() permet de récupérer la valeur d’un pixel à des coordonnées (x, y). Pillow attend les coordonnées sous la forme d’un tuple (x, y). La réponse correcte du quiz montre comment extraire les trois composantes rouge, vert, bleu :
- Syntaxe correcte :
r, v, b = img.getpixel((100, 250))
Cette instruction renvoie un tuple (R, G, B) que l’on peut directement décomposer en trois variables. Les réponses incorrectes illustrent des erreurs fréquentes :
- Oublier les parenthèses autour du tuple :
img.getpixel(100,250)(la fonction attend un seul argument). - Confondre
getpixelavecputpixel, qui sert à écrire une couleur. - Inverser les coordonnées (250,100) au lieu de (100,250).
2. Modifier la couleur d’un pixel
Pour changer la couleur d’un pixel, on utilise putpixel(). L’instruction suivante du quiz :
img.putpixel((250,250),(255,0,0))
place la couleur rouge pur (255 pour le rouge, 0 pour le vert et le bleu) au pixel (250,250). Ainsi, après exécution, le pixel affichera exactement la teinte rouge.
3. Échanger les canaux couleur
L’échange des canaux consiste à réassigner les valeurs r, v et b entre elles. Dans le script typique, on lit un pixel, on crée de nouvelles variables (n_r, n_v, n_b) puis on les écrit avec putpixel. La question du quiz indique que n_r reçoit la valeur du canal vert :
- Valeur assignée :
n_r = v
Cette opération fait que le rouge devient ce qui était auparavant le vert. Le commentaire du script doit refléter cette logique ; sinon, il crée une confusion (voir section 7).
4. Créer un effet négatif
Le négatif d’une image consiste à inverser chaque composante couleur : n_c = 255 - c où c représente r, v ou b. Ainsi, pour le canal vert :
n_v = 255 - v
Cette instruction inverse la composante verte du pixel, produisant la couleur complémentaire. De même, pour le bleu, si b = 100, alors n_b = 255 - 100 = 155. Le quiz confirme que la valeur attendue est 155.
5. Conversion en niveaux de gris
Le passage en niveaux de gris se réalise souvent en calculant la moyenne des trois canaux :
gris = (r + v + b) // 3
Le résultat gris est ensuite appliqué aux trois canaux ((gris, gris, gris)) pour obtenir un ton de gris uniforme. Cette méthode utilise la division entière (//) afin d’obtenir un entier compris entre 0 et 255.
6. Résultat d’un script négatif complet
Lorsque le script de négatif est appliqué à chaque pixel d’une image, toutes les couleurs sont remplacées par leurs complémentaires. Le résultat final est donc :
- Toutes les couleurs seront leurs complémentaires
Contrairement à une simple inversion de canal ou à une conversion en niveaux de gris, le négatif conserve la structure de l’image tout en modifiant chaque teinte.
7. Cohérence entre le code et le commentaire
Un bon commentaire doit décrire précisément ce que fait le code. Dans le script d’échange de canaux, le problème logique relevé est que le commentaire indique « pixel rouge fixe », alors que le code échange réellement les valeurs de tous les pixels. Cette incohérence peut entraîner des malentendus lors de la maintenance du script.
8. Exemple complet : script de négatif
Voici un exemple complet qui illustre toutes les notions abordées :
from PIL import Image
# Chargement de l'image
img = Image.open('photo.jpg')
width, height = img.size
# Parcours de chaque pixel
for x in range(width):
for y in range(height):
r, v, b = img.getpixel((x, y))
n_r = 255 - r
n_v = 255 - v
n_b = 255 - b
img.putpixel((x, y), (n_r, n_v, n_b))
# Enregistrement du résultat
img.save('photo_negative.jpg')
Ce script lit chaque pixel, calcule le négatif de chaque canal, puis réécrit le pixel avec les nouvelles valeurs. Le fichier résultant photo_negative.jpg affichera l’image en couleurs complémentaires.
9. Bonnes pratiques SEO pour les tutoriels de programmation
Pour que votre article soit bien référencé, pensez à :
- Utiliser des balises sémantiques (
<h2>,<h3>,<p>) afin de structurer le contenu. - Inclure des mots‑clés pertinents comme « manipulation pixel Pillow », « script négatif Python », « conversion niveaux de gris PIL ».
- Rédiger des paragraphes de 150‑200 mots, enrichis de exemples de code et de explications détaillées.
- Ajouter des listes à puces pour faciliter la lecture et améliorer le taux de rétention.
- Utiliser des balises
<pre>et<code>pour le code, ce qui augmente la pertinence pour les moteurs de recherche.
10. Résumé des concepts clés
En récapitulant, vous devez maîtriser :
- La récupération d’un pixel avec
img.getpixel((x, y)). - L’écriture d’un pixel avec
img.putpixel((x, y), (R, G, B)). - L’inversion des canaux pour créer un négatif (
255 - canal). - Le calcul de la moyenne pour obtenir un niveau de gris (
(r+v+b)//3). - L’échange de canaux couleur et l’importance d’un commentaire cohérent.
Ces compétences vous permettront de développer des filtres d’image personnalisés, d’analyser des données visuelles et d’automatiser des traitements d’image avancés avec Python.
