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.