- Comprendre le fonctionnement des images ;
- Manipuler les pixels des images ;
- Créer des algorithmes modifiant des images.
TP1 - Programmer des images
Nous allons utiliser python
pour programmer et manipuler les images et leurs pixels.
Sur EduPython, faire :
- Créer un nouveau fichier en cliquant sur l'icône
📄
, ou en appuyant surCTRL
+N
- Enregistrer le fichier sous le nom
TP1_Photographie
en cliquant sur l'icône💾
, ou en appuyant surCTRL
+S
Bibliothèque PIL
PIL est une bibliothèque comportant un ensemble de fonctions pouvant interagir directement avec les images.
On utilise la ligne suivante :
from PIL import Image
Elle signifie que dans la bibliothèque PIL, on importe l'ensemble des fonctionnalités de Image.
L'ensemble des fonctionnalités à utiliser est à découvrir ici ⬇️
- Charger une image
- Créer une image
- Récupérer un pixel
- Modifier un pixel
- Montrer une image
- Taille d'une image
img = Image.open("nom_fichier.extension")
img
est une variable qui sauvegarde l'image que l'on a chargé.Image.open
est la fonction de PIL permettant de charger l'image.nom_fichier.extension
doit être le nom de votre fichier AVEC son extension.
Exemple :
image1 = Image.open("photo.jpg")
image2 = Image.open("chat.png")
image1
charge la photo photo.jpg, tandis que image2
charge chat.png.
img = Image.new(colorimétrie, taille , couleur_remplissage)
img
est une variable qui sauvegarde l'image que l'on a créé.Image.new
est la fonction de PIL permettant de créer une image.colorimétrie
est un paramètre correspondant à la profondeur de couleur. En mettant "2" on ne met que 4 couleurs ... Nous utiliserons la valeur"RGB"
.taille
est un paramètre représentant la taille en pixel de l'image, de la forme (longueur,largeur). Les parenthèses sont primordiales.couleur_remplissage
est un paramètre représentant la couleur à mettre par défaut. On peut mettre un ensemble (rouge,vert,bleu), dont la valeur de chaque élément doit être compris entre 0 et 255. Le blanc est représenté par (255,255,255), et le noir par (0,0,0).
Exemple :
nouvelleImage = Image.new("RGB", (300,450) , (255,255,255))
nouvelleImage
est une image créée en mode 24 bits (RGB), de longueur 300px et de largeur 450px, dont tous les pixels sont blancs ((255,255,255)).
pixel = img.getpixel((x,y))
img.getpixel
Fonction de PIL permettant de récupérer un pixel de l'imageimg
.(x,y)
correspond au point de coordonnées x,y de l'imageimg
.pixel
enregistre la valeur du pixel au point de coordonnées x,y, sous la forme (r,g,b). On peut récupérer les différentes valeurs :- pixel[0] nous donne la valeur de la couleur rouge ;
- pixel[1] nous donne la valeur de la couleur verte ;
- pixel[2] nous donne la valeur de la couleur bleue.
Exemple :
pixel = nouvelleImage.getpixel((100,100))
print(pixel[0],pixel[1],pixel[2])
pixel
contient les 3 valeurs RGB de l'image nouvelleImage sur le pixel de coordonnées (100,100). On affiche individuellement chaque valeur (rouge, vert et bleu).
img.putpixel((x,y), valeur)
img.putpixel
Fonction de PIL permettant de modifier un pixel de l'imageimg
.(x,y)
correspond au point de coordonnées x,y à modifier de l'imageimg
.valeur
est la nouvelle valeur donnée au pixel. Elle doit être de la forme (r,g,b).
Exemple :
nouvelleImage.putpixel((100,100), (0,255,0))
Sur l'image nouvelleImage
, le pixel de coordonnées (100,100) a pour valeur (0,255,0) (vert).
img.show()
img.show()
Fonction de PIL permettant l'affichage de l'image img
.
largeur, hauteur = img.size
img.size
permet de récupérer la taille de l'imageimg
.largeur
contient la largeur de l'image.longueur
contient la longueur de l'image.
Exercice 1 - Prise en main
- Quelle valeur correspond à un pixel rouge ? A un pixel jaune ?
- Créer une image de taille 9x9 de couleur jaune et la stocker dans la variable
image
. - Afficher l'image.
- Modifier le pixel de coordonnées
x=1, y=1
par du rouge. - Faire la même avec le pixel de coordonnées
x=7, y=1
. - Mettre toute la 6ème rangée en bleu.
On peut parcourir les rangées de l'image et afficher les pixels grâce à ce code :
for x in range(9):
print(image.getpixel((x,0)))
- Rajouter dans le code une boucle
for
permettant de parcourir les colonnes de chaque rangée. - Modifier le print pour afficher tous les pixels.
Petite aide
Exercice 2 - Jouer avec une image
- Télécharger l'image batman.png.
- Importer l'image dans le programme et la stocker dans la variable
batman
. - Afficher la largeur et la longueur de l'image.
- Parcourir les pixels de l'image, et afficher la valeur de chaque pixel.
- Sauvegarder dans une varible
rouge
,vert
,bleu
les valeurs de chaque composante des pixels.ComposanteIci, le terme
composante
fait référence aux couleurs composants un pixel, à savoir le rouge, le vert et le bleu. - Modifier l'image pour intervertir les couleurs. Le rouge devient vert, le vert devient bleu, et le bleu devient rouge.
Petite aide
- Modifier l'image pour supprimer la couleur rouge (valeur
rouge
à 0).
On souhaite mettre l'image dans sa version négative. Pour faire le négatif d'une image, il faut soustraire 255
à la valeur de chaque composante d'un pixel.
Si un pixel a pour valeur (120,54,2), son négatif serait (255-120, 255-54, 255-2)
, soit (135, 201, 253).
- Faire le négatif de batman.
On souhaite mettre l'image en nuance de gris. La nuance de gris correspond à la moyenne des 3 composantes, attribée à chaque composante du pixel.
Si un pixel a pour valeur (120,54,2), la moyenne est de (120+54+2)/3
soit 59, sa nuance de gris serait (59, 59, 59)
.
- Faire la nuance de gris de batman.