Pillow

source : https://pillow.readthedocs.io/en/latest/handbook/tutorial.html

Pillow (ex PIL – Python Imaging Library) est une bibliothèque python permettant la manipulation des images.

Télécharger l’image ci-contre (enregistrer l’image sous le nom discus.jpg) afin de pouvoir traiter les exemples de code qui vont suivre…

L’objet Image

L’objet de base de PIL est défini dans la classe Image , du module du même nom.

Ouverture d’un fichier image

affiche :

img  est un objet  PIL.JpegImagePlugin.JpegImageFile  : une sous-classe de la classe PIL.Image …

Information sur une image

affiche :
Principaux attributs de l’objet Image :

  • .format  : format de la source de l’image (si elle provient d’un fichier)
  • .size  : taille (en pixels) de l’image
  • .mode  : noms et type des différents canaux de l’image (« RGB » = 3 canaux Rouge, Vert et Bleu – « L » = un canal pour niveaux de gris – …)

Affichage d’une image

La méthode .show()  n’est pas très efficace, car elle crée un fichier temporaire sur le disque dur, puis l’affiche avec l’application par défaut du système.

Enregistrement d’un image dans un fichier

Pour enregistrer une image dans un fichier, l’objet Image  possède une méthode .save() , qui permet de choisir le format d’enregistrement :

Remarque : pour gérer d’éventuelles erreur de lecture ou d’enregistrement, il peut être judicieux d’intercepter les exception d’erreur.

 

Découper une image

La région à découper est définie par 4 coordonnées (gauche, haut, droit, bas) en pixels.

Rappel : dans le système de coordonnées d’une image, l’origine (0,0) se situe en haut à gauche.

 

Collage d’une image dans une autre

Attention : la région de collage doit être exactement de la même taille que la portion d’image à coller !

 

 

Séparation des canaux

canaux rouge, vert et bleu de l’image :

Transformations géométriques

Rotation

angle en degrés, dans le sens des aiguilles d’une montre.

Remarque : rajouter un argument expand = true  permet d’éviter que l’image ne soit coupée.

 

Redimensionnement

Transposition

La méthode .transpose()  permet des modifications de géométrie simples :

Conversion d’une image

La méthode .convert()  permet de modifier le mode de l’image.

Par exemple, on peut convertir une image RGB en une image en niveaux de gris :

 

 

Traitements de l’image

PIL possède de nombreuses méthodes de traitement des images (amélioration, correction, filtrage, …)

Filtres

Les filtres sont contenus dans le module ImageFilter  et applicable par la méthode .filter() .

Par exemple , amélioration de la netteté :

<table>

avant

après

 

Modification par pixel

La méthode .point()  permet de modifier une image pixel par pixel, grâce à une fonction de transformation.

Exemples :

  • Augmentation de la luminosité (la valeur de chaque pixel est multiplié par 1,5) :

  • Augmentation de l’intensité du canal rouge seulement :

 

Accès aux pixels

Il est possible d’accéder indépendamment à chaque pixel de l’image à l’aide deux méthodes :

.getpixel((x, y)) renvoie la valeur du pixel de coordonnées (x, y) .putpixel((x, y), pixel)  affecte la valeur pixel  au pixel de coordonnées (x, y)  

Activité :

  • Remplacer tous les pixels à dominante rouge (niveau de rouge supérieur à tous les autres niveaux), par des pixels noirs.

 

Ajustements photo

Le module ImageEnhance  permet des ajustement classique de la photographie : luminosité, contraste, balance des couleurs, netteté, … de manière plus simple encore.

Ce module s’utilise en créant un objet « Ajustement » ( ImageEnhance ) :

 

Conversion en liste

Il est possible de récupérer les valeurs des pixels d’une image sous la forme d’une liste.

Attention : le type list  de Python n’est pas optimisé pour la manipulation des images. A réserver uniquement pour des traitements particuliers !

Il s’agit d’une liste simple, pour obtenir l’image dans un format « liste de lignes », on peut procéder ainsi :
 

 


Widget not in any sidebars

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

code