Pillow : Comment traiter des images avec Python

-
3
 m de lecture
-

Anciennement PIL, Pillow est une bibliothèque open source spécifiquement conçue pour le traitement d’images via Python. Véritable mine d’or pour la manipulation de fichiers images, découvrons ensemble quelques fonctionnalités de base de cette librairie de référence.

Qu'est ce que la bibliothèque Python ?

À l’origine conçue par Fredrik Lundh en 1995, Python Imaging Library abrégé PIL fut la bibliothèque de référence pour le traitement d’images sur Python. Délaissée en 2009, le code source du projet est alors repris par Alex Clark ; il publie en 2010 une nouvelle version dénommée Pillow, remplaçant définitivement PIL. 

Contrairement à d’autres librairies ne proposant accessoirement que quelques méthodes de traitement d’image, Pillow est presque exclusivement centrée sur ce domaine. Elle est donc bien plus exhaustive et optimisée pour la manipulation d’images.

C’est pour cette raison qu’on retrouve régulièrement l’utilisation de Pillow dans les étapes clés d’un projet de Computer Vision ou de traitement vidéo, malgré l’existence de librairies plus générales telles que OpenCV ou MoviePy.

Au total, pas moins de 30 formats image sont supportés par ce module. Parmi les formats proposés, on retrouve les fichiers usuels JPG, PNG, JPEG, GIF, mais également des extensions plus spécifiques telles que BLP (utilisé par le célèbre jeu World of Warcraft), DDS (également prolifique dans l’industrie du jeu-vidéo), ou encore FITS (utilisé en astronomie).

L’un des principaux attraits de Pillow est sa facilité de prise en main. Les notations sont naturelles, les classes et les méthodes sous-jacentes ont été bien pensées pour faciliter l’expérience de l’utilisateur. C’est cet aspect user-friendly que nous allons mettre en valeur dans cet article introductif. L’objectif est de présenter une série de méthodes que vous serez amenés à utiliser, allant du plus simple au légèrement plus sophistiqué.

La classe Image au cœur de Pillow

Importer une image sur Python

Au sein de cette vaste bibliothèque subsiste une classe sobrement intitulée Image. Celle-ci contient tout une collection de méthodes essentielles pour démarrer le traitement d’images. Voyons ci-dessous un exemple très basique d’utilisation :

La première étape consiste à importer la classe Image depuis le module PIL. Plutôt que d’importer l’intégralité de la librairie Pillow, il est bon usage de n’ajouter que les éléments qui seront pertinents à notre projet.

Ensuite, nous déclarons une variable im de type Image via la méthode open(). Pour faire simple, nous avons stocké le fichier image logoDST.jpg dans la nouvelle variable.

La troisième ligne permet d’afficher sur la console quelques propriétés du fichier, disponibles dans les différents attributs de la classe : le format, la taille et le mode (échelle de gris, RGB, CMYK…) et enfin, la dernière ligne permet d’afficher l’image en question. Notez que sur un fichier .ipynb (Jupyter Notebook), il faut substituer cette ligne par display(im) afin d’afficher l’image en question ! 

Changer le format et créer une vignette

Comme toute librairie de traitement d’image digne de ce nom, vous avez la possibilité de modifier à souhait la nature de votre fichier :

Ce snippet permet de convertir un fichier en format JPG. Pour spécifier un format en particulier, il faut le mentionner dans le deuxième paramètre de la fonction save(). On peut voir une application de ce principe dans le prochain extrait, permettant de créer une vignette pour le fichier .JPEG

Enfin, il est également possible de reconnaître le format d’un fichier via la commande suivante :

Transformer une image en un tour de main

Comme mentionné dans la première partie, l’atout principal de Pillow réside dans son large panel de fonctions de transformations ainsi que leur facilité d’exploitation. 

Pour illustrer cette partie, nous allons effectuer une série de transformations sur une image source. 

Ci-dessous, nous avons visualisé l’effet de 5 transformations basiques sur une image source (dénommée « Original »).

À chaque figure est associée la seule et unique ligne de code nécessaire pour recréer l’image affichée. Ainsi, im.convert(« L ») par exemple permet de convertir le mode de l’image en échelle de gris, et tout aussi simplement, nous arrivons à cropper une image, la transposer, la redimensionner ou encore la tourner.

Retouche photo avec ImageEnhance

Le module ImageEnhance contient quatre classes permettant de contrôler les paramètres usuels en retouche photographique : la netteté, la balance des blancs, le contraste et la luminosité.

Chacune de ces classes contient une seule méthode appelée enhance(), prenant en paramètre une valeur numérique correspondant au facteur de renforcement : exprimé en ratio, un paramètre fixé à 1.0 renverra simplement une copie conforme de l’image en entrée.

Le contraste définit l’échelle relative de différence entre les parties claires et foncées d’une image. La balance des blancs (color balance) ajuste l’intensité des couleurs selon l’éclairage. La luminosité impacte la clarté globale de l’image, contrairement au contraste. Enfin, la netteté (sharpness) définit la finesse des détails d’une image.

De quoi retoucher vos photos en quelques lignes !

ImageFilter - un premier pas dans la Computer Vision

Si vous souhaitez poursuivre votre aventure dans la vision par ordinateur, Pillow et le module ImageFilter constituent une très bonne porte d’entrée vers cet univers pour le moins attrayant. C’est dans ce module que nous retrouvons les opérations de flou gaussien, d’amélioration des détails et de gaufrage (embossing). Beaucoup d’algorithmes de Computer Vision requièrent en effet d’appliquer ce type de filtrage, surtout pour la détection de contours. 

Pour en savoir plus sur les fondements de la Computer Vision; vous pouvez consulter notre article dédié à ce sujet.

Et bien d'autres encore !

Si vous avez apprécié cette mise en bouche de la bibliothèque PIL, sachez que cet article n’a fait qu’effleurer une partie des fonctionnalités présentes ! Il est effectivement possible de complexifier votre traitement d’images en créant par exemples des formes personnalisées et fusionner différentes images…

Facebook
Twitter
LinkedIn

DataScientest News

Inscrivez-vous à notre Newsletter pour recevoir nos guides, tutoriels, et les dernières actualités data directement dans votre boîte mail.

Vous souhaitez être alerté des nouveaux contenus en data science et intelligence artificielle ?

Laissez-nous votre e-mail, pour que nous puissions vous envoyer vos nouveaux articles au moment de leur publication !

Newsletter icone
icon newsletter

DataNews

Vous souhaitez recevoir notre
newsletter Data hebdomadaire ?