- Comprendre le fonctionnement des images ;
- Manipuler les pixels des images ;
- Créer des algorithmes modifiant des images ;
- Découvrir les composantes rgb d'une image.
TP2 - Décomposition d'image
Sur EduPython :
- Créer un nouveau fichier en cliquant sur l'icône
📄, ou en appuyant surCTRL+N - Enregistrer le fichier sous le nom
TP2_Photographieen cliquant sur l'icône💾, ou en appuyant surCTRL+S
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.
Décomposer les couleurs d'une image
On va chercher dans un premier temps à décomposer une image selon ses 3 couleurs primaires, c'est-à-dire créer :
- Une image composée de la variation de
rouge; - Une image composée de la variation de
vert; - Une image composée de la variation de
bleu;
- Dans un premier temps, télécharger la photo suivante, et la mettre au même endroit que le fichier python.
- Importer la photo sur python à l'aide de l'instruction
Image.open, et l'enregistrer dans une variablelac. - Créer les variables
hauteuretlargeurà l'aide de l'instructionsize.
On souhaite avoir 3 images (rouge, vert et bleu) de la taille de lac, dans lesquelles chaque pixel aura pour valeur la valeur correspondant au rouge, vert et bleu des pixels de lac.
Si le pixel de coordonnées (10,10) de lac a pour valeur (147,31,276), alors à ce même point de coordonnées :
rougeaura pour valeur (147,0,0) ;vertaura pour valeur (0,31,0) ;bleuaura pour valeur (0,0,276).
- Créer les 3 images
rouge,vertetbleu, de taillehauteuretlargeur, dont la couleur de fond estblanche. - À l'aide de boucles for, parcourir tous les pixels de
lac(voir TP1). - Dans la 2ème boucle for, récupérer dans une variable
pixella valeur des pixels (fonctiongetpixel).
Pour rappel, la fonction getpixel donne un résultat sous la forme (rouge, vert, bleu).
Si on récupère le résultat dans une variable pixel, on peut accéder à la valeur rouge en utilisant :
pixel[0]
- Dans 3 variables
pixel_rouge,pixel_vert,pixel_bleu, sauvegarder chacune des composantes depixel. - À la suite (et toujours dans la boucle) dans l'image
rouge, changer la couleur du pixel par la valeur depixel_rougeen composante rouge, et0pour la composante verte et bleue. - Faire la même chose pour l'image
vertet l'imagebleu, avec les valeurs depixel_vertetpixel_bleuen composante verte et bleue respectivement. - À la fin du programme, afficher les images rouge, vert et bleu.
Recomposition d'image
Nous allons faire la même chose mais dans l'autre sens cette fois-ci. Nous allons partir de 3 images rouge, verte et bleue, pour recomposer l'image.
- Télécharger les 3 images rouge, vert, bleu, et les mettre au même endroit que le fichier python.
- Les ouvrir avec la fonction
Image.open, et les sauvegarder chacune dans des variablesrouge,vertetbleu. - Créer les variables
hauteuretlargeurà l'aide de l'instructionsize. - Créer une image
imagede taillehauteuretlargeur, remplie avec la couleurblanc. - À l'aide de boucles
for, parcourir la longueur et la largeur :#parcourt la largeur
for ... in range(...) :
#parcourt la hauteur
for ... in range(...) :
... - Récupérer la valeur des pixels de chaque image
rouge,vertetbleudans des variablespixel_rouge,pixel_vertetpixel_bleu. - Changer les pixels de
imagepar la valeurpixel_rouge,pixel_vertetpixel_bleu. - Afficher
image.