- 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_Photographieen 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")
imgest une variable qui sauvegarde l'image que l'on a chargé.Image.openest la fonction de PIL permettant de charger l'image.nom_fichier.extensiondoit ê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)
imgest une variable qui sauvegarde l'image que l'on a créé.Image.newest la fonction de PIL permettant de créer une image.colorimétrieest un paramètre correspondant à la profondeur de couleur. En mettant "2" on ne met que 4 couleurs ... Nous utiliserons la valeur"RGB".tailleest un paramètre représentant la taille en pixel de l'image, de la forme (longueur,largeur). Les parenthèses sont primordiales.couleur_remplissageest 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.getpixelFonction 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.pixelenregistre 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.putpixelFonction de PIL permettant de modifier un pixel de l'imageimg.(x,y)correspond au point de coordonnées x,y à modifier de l'imageimg.valeurest 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.sizepermet de récupérer la taille de l'imageimg.largeurcontient la largeur de l'image.longueurcontient 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=1par 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
forpermettant 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,bleules valeurs de chaque composante des pixels.ComposanteIci, le terme
composantefait 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.