PROGRAMMATION AVEC PYTHON : utilisation de la librairie PIL.

publicité
09c.Traitement image avec Python eleve.doc
PROGRAMMATION AVEC PYTHON : utilisation de la librairie PIL.
L’écriture de toutes les informations est fastidieuse, et la modification d’un fichier avec cette méthode encore plus !
La bibliothèque PIL (Python Image Library) jusqu’à la version 2.7ou PILLOW qui prend en charge les versions 3.X, permet de
manipuler des images aux format PNG, JPEG, GIF, TIFF, and BMP
Elle est préinstallée avec edupython.
Remarque : la version de Python qui est installée est une version portable. On ne peut donc pas ajouter des bibliothèques PILLOW car le
programme n’est pas inscrit dans le registre, ce qui fait qu’on ne peut pas travailler sur les fichiers au format PPM, PGM, PBM.
On peut convertir les fichiers précédents au format PNG reconnu dans la version que nous utilisons avec le logiciel GIMP, ou bien au
format JPG
Quelques instructions de base :
From PIL import Image
Image.save ( img, nom)
Image.new("RGB" , (large , haut ) )
Image.show ( img)
Chaque programme Python doit commencer par cette instruction, qui
importe les programmes auwquels on fera appel.
Ouvre le fichier nom et retourne l'image contenue dedans
(par exemple open ( " teapot. png" ).
Sauvegarde l'image img dans le fichier i.
Retourne une image de taille large x haut, initialement noire.
Affiche l'image img.
Image. putpixel (img ,(x , y) ,(r , g ,b) )
Image.getpixel (img ,(x , y) )
Peint le pixel (x, y) dans l'image img de la couleur (r,g,b)
Retourne la couleur du pixel (x, y) dans l'image img
Image.open (nom) (
Exercice 1
premiers contacts
Lancer le programme python « 04.utilisation modulePIL.py », et observer le résultat de l’affichage.
Le fichier image doit être dans le répertoire courant (c’est celui qui contient le fichier Python en train d’être exécuté).
from PIL import Image
#on importe le module
img= Image.open("04.Exemple fichier couleur.png") #on ouvre l'image dans la variable img
taille = img.size
#on récupère la taille de l'image largeur x hauteur
print(taille)
formatImage = img.format
#on récupère le format de l'image (PNG)
print(formatImage)
print (img.mode)
#on imprime directement le mode
data = list(img.getdata())
#on mémorise la liste des pixels rgb dans data
print (data[:])
#pour voir l'ensemble des pixels
print("fin")
rouge = [i[0] for i in data]
# on récupère la liste des pixels rouges
print ("rouge",rouge)
vert = [i[1] for i in data]
# on récupère la liste des pixels verts
print ("vert",vert[:3])
# on imprime les 3 premières valeurs de la liste
bleu = [i[2] for i in data]
# on récupère la liste des pixels bleus
print ("bleu",bleu[:30])
#comme il y a moins de 30 valeurs, tout est imrimé !
Résultat de l’affichage :
(4, 2)
PNG
RGB
[(0, 0, 0), (255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255), (255, 255, 255)]
fin
rouge [0, 255, 0, 0, 255, 255, 0, 255]
vert [0, 0, 255]
bleu [0, 0, 0, 255, 0, 255, 255, 255]
1/3
09c.Traitement image avec Python eleve.doc
Les données sont récupérées sous forme d’une liste entre crochets.
Chaque élément de la liste est un triplet, qui contient dans l’ordre les valeurs des intensités couleur (R,V,B).
La liste data contient 8 éléments, qui correspondent aux 8 pixels de l’image, en partant du haut gauche.
Observer comment on accède à la composante R,V, ou B d’un pixe donné.
Observer comment on crée chacune des listes rouge, vert, bleu.
Exercice 2
Accès direct aux pixels : lecture et modification
Lancer le programme python « 05.Acces aux pixels.py», et observer le résultat de l’affichage.
from PIL import Image
#on importe le module
img= Image.open("04.Exemple fichier couleur.png") #on ouvre l'image dans la variable img
taille = img.size
largeur, hauteur = img.size
#on récupère la taille de l'image largeur x hauteur
print("largeur",largeur, "hauteur",hauteur)
data = list(img.getdata())
#on mémorise la liste des pixels rgb dans data
print (data[:])
#pour voir l'ensemble des pixels
print("fin des données originales")
# lecture de valeurs de pixels
for j in range (hauteur) :
print ("ligne : ", j)
for i in range (largeur) :
print("ligne : ", j, "colonne :", i)
pixel00 = img.getpixel((i,j))
print("valeur : ",pixel00)
print ("")
# modification de pixels
print (data[:])
#pour voir l'ensemble des pixels
img.putpixel((1,0),(0,0,170))
#modifie la colonne 1 cad la 2eme colonne et la ligne 0 , cad la 1er ligne
data1 = list(img.getdata())
#on mémorise la liste des pixels rgb dans data
print (data1[:])
#pour voir l'ensemble des pixels après modification
img.save("05.modifie.png")
Résultat de l’affichage :
Observer l’affichage de la console.
Les deux dernières lignes montrent le pixel modifié.
[(0, 0, 0), (255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255), (255, 255, 255)]
[(0, 0, 0), (0, 0, 170), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255), (255, 255, 255)]
Exercice 3 avec Python, inverser les niveaux de couleur
But de l’exercice :
On veut créer un programme dont les fonctionnalités sont les suivantes :
Lire le fichier image ( de type PNG) dans le répertoire courant. (ici : « 06.tigre.png »)
Modifier chaque pixel de l’image pour inverser l’intensité de couleur (ou bien les niveaux de gris).
Enregistrer l’image obtenue dans le répertoire courant sous un autre nom ( ici :« 06.tigre inverse.png »)
1) Ecrire l’algorithme correspondant.
2) Créer un fichier Python « 06.inverser les niveaux de couleur.py »
Reprendre les instructions découvertes dans les programmes python pour écrire le programme correspondant.
« 04.utilisation modulePIL.py »,
« 05.Acces aux pixels.py »
2/3
09c.Traitement image avec Python eleve.doc
Exercice 4 avec Python, transformer une image couleur en niveaux de gris
Appeler le nouveau programme de cet exercice « 07.Transformer couleur en niveau de gris.py »
Modifier le programme précédent pour transformer l’image « 06.tigre.png », en une image en niveaux de gris « 07.tigre gris.png »)
Exercice 5 avec Python, transformer une image couleur en NB, avec un niveau de seuil variable
Appeler le nouveau programme de cet exercice « 08.Transformer couleur en NB seuil variable.py»
Modifier le programme précédent pour transformer l’image « 06.tigre.png », en une image en une image NB « 08.tigreNB.png»).
L’utilisateur doit entrer le seuil Nb, qui est un entier entre 0 et 255.
Exercice 6 avec Python, placer une bordure autour d’une image
Ajouter autour d’une image une bordure d’épaisseur e pixels (e est une variable qu’on entre au clavier).
Attention, la bordure vient se placer autour de l’image, elle n’écrase pas les pixels existants.
Tester le programme avec l’image « 06.tigre.png ».
Appeler ce programme « 09.PlacerBordureImage », et appeler le fichier de sortie « 09.tigreBordure.png ».
Exercice 7 avec Python, symétrie verticale image
Ecrire un programme qui permet d’effectuer une symétrie par rapport à un axe vertical d’une image.
Tester le programme avec l’image « 06.tigre.png ».
Appeler ce programme « 10.SymétrieAxeVertical », et appeler le fichier de sortie « 10.tigreSymetrieVerticale.png ».
Exercice 7 avec Python, symétrie horizontale image
Ecrire un programme qui permet d’effectuer une symétrie par rapport à un axe horizontal d’une image.
Tester le programme avec l’image « 06.tigre.png ».
Appeler ce programme « 11.SymétrieAxeHorizontal », et appeler le fichier de sortie « 11.tigreSymetrieHorizontal.png ».
Exercice 8 avec Python, demi tour image
Ecrire un programme qui permet d’effectuer le demi tour d’une image.
Tester le programme avec l’image « 06.tigre.png ».
Appeler ce programme « 12.DemiTour », et appeler le fichier de sortie « 12.tigreDemitour.png ».
Exercice 8 avec Python, flouter image
Ecrire un programme qui permet de « flouter » une image.
On remplace un pixel par la moyenne des 9 pixels qui sont autour de lui.
On ne traite pas les pixels du bord de l’image, qui restent inchangés.
Appeler ce programme « 13.Floutage », et appeler le fichier de sortie « 13.tigreFlou.png ».
3/3
Téléchargement