Gestion d`images en Python

publicité
Gestion d'images en Python
Configuration
Pyzo ne contient pas - en standard - la bibliothèque PIL (Python Image Library) qui permet de lire
différents formats d'images.
Pour l'installer, il suffit d'utiliser l'installateur CONDA en tapant la commande: conda install pillow Cette commande doit etre tapée comme une commande Python. L'installateur télécharge automatiquement la
bibliothèque (il faut bien sûr être connecté à internet).
L'image en Python
Les images numériques en noir et blanc peuvent être considérées comme des
matrices à deux dimensions (largeur et hauteur). Chaque élément de cette matrice
est la luminosité d'un pixel de l'image (0 pour noir et 1 pour blanc).
De même, les images numériques en nuances de gris peuvent être considérées
comme des matrices à deux dimensions. Chaque élément de cette matrice est la
luminosité d'un pixel de l'image (de 0 pour noir à 255 pour blanc).
Les images numériques en couleurs peuvent être considérées comme la superposition
de trois couches de matrices à deux dimensions. La première matrice code la luminosité
du Rouge, la seconde celle du Vert et la troisième celle du Bleu.
1. Télécharger sur votre ordi les images de la page Python. Stockez les dans un dossier dédié.
2. Les images en « noir et blanc »
a) Récupérer playmo.png et zoomer : on s'aperçoit que l'image est constituée d'une multitude de
pixels organisés en lignes (y) et colonnes (x). La couleur de chaque pixel est codée sur un octet
8
(c'est-à-dire 8 bits, qui peut donc contenir un entier compris entre 0 à 2 −1=255 ), et représente
donc une nuance de gris parmis 255 valeurs possibles. On peut voir cette valeur comme la
luminosité du pixel: la valeur 0 code la couleur noire, la valeur 255 code la couleur blanche, et les
valeurs intermédiaires codent des nuances de gris de plus en plus claires à mesure que la valeur
augmente.
b) Ouvrir le fichier playmo.png
Utilisez une variable dossier, du nom du dossier qui contient tous les fichiers images.
#########Python#####
from PIL.Image import *
dossier = « /Users/.../ »
f = dossier+'playmo.png'
# Ouverture du fichier
img1 = Image.open(f)
##########
On obtient un objet de nom img1. Cet objet appartient à une classe d'objets, les Images.
Une 'classe' en Python est un type d'objet avec lequel on peut faire un certain nombre de
choses, en particulier utiliser des attributs et appeler des fonctions qui sont, dans ce cas, appelées
méthodes.
Par exemple la Liste est une classe dont append est une méthode.
Quelques attributs de la classe Image
size : retourne un couple (longueur hauteur, en pixels)
format : JPEG etc.
##Python###
Faire afficher la taille et le format de l'image
##########
Quelques méthodes de la classe Image
img1. Show() : affiche l'image
img1.getdata() : retourne les pixels de l'image. Il faut appliquer au résultat la méthode list pour
obtenir une liste utilisable.
img1.crop(box) # Prend un rectangle dans l'image, retourne un objet de
la class Image. box est un quadruplet : left, upper, right, lower
img1.paste(image,box) #Copie une image (de la même taille que box) à l'emplacement
défini par box
c = Image.getpixel(img,x,y) # récupère le pixel de coordonnées (x,y)
Attention les pixels commencent à (0,0) en haut à gauche et sont orientés : x vers la droite, y vers le
bas.
Image.putpixel(image,x,y,c) # Remplace le pixel de coordonnées x et y par c
###### Python ######
Ecrire une fonction négatif(img) : qui remplace playmo.png par son négatif.
Ecrire une fonction noir_blanc(img,seuil) : qui remplace tous les pixels de playmo.png
par blanc si pixel > seuil, noir sinon.
Ecrire une fonction assombrir_eclaircir(img,coeff) : qui multiplie tous les pixels par coeff.
Si coeff > 1, c'est un éclaircissement, sinon un assombrissement.
####################
3. Les fichiers en couleur.
Ouverture du fichier ESH_au_ski.jpg
Chaque pixel est un triplet : (x,y,z). x code le rouge, y code le vert, z le bleu.
A l'aide de la méthode img1.transpose(ROTATE_180), écrire une fonction
retourne_region(img,left,upper,right,lower) qui retourne à 180° un rectangle de l'image et affiche le
résultat. Essayer sur différentes tailles de rectangles, et en particulier, retourner l'image complète.
Ecrire et tester les fonctions suivantes :
def supprimer_une_couleur(image, couleur) # Couleur ='R', 'G' ou 'B'
def rectangle_noir(image, left, upper, right,lower) # Colorie un rectangle de l'image en noir
def noir_et_blanc(image) # Fabrique un noir et blanc à partir de l'image en couleur.
Téléchargement