- 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_Photographie
en 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")
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.
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
hauteur
etlargeur
à 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 :
rouge
aura pour valeur (147,0,0) ;vert
aura pour valeur (0,31,0) ;bleu
aura pour valeur (0,0,276).
- Créer les 3 images
rouge
,vert
etbleu
, de taillehauteur
etlargeur
, 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
pixel
la 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_rouge
en composante rouge, et0
pour la composante verte et bleue. - Faire la même chose pour l'image
vert
et l'imagebleu
, avec les valeurs depixel_vert
etpixel_bleu
en 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
,vert
etbleu
. - Créer les variables
hauteur
etlargeur
à l'aide de l'instructionsize
. - Créer une image
image
de taillehauteur
etlargeur
, 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
,vert
etbleu
dans des variablespixel_rouge
,pixel_vert
etpixel_bleu
. - Changer les pixels de
image
par la valeurpixel_rouge
,pixel_vert
etpixel_bleu
. - Afficher
image
.