10 outils de manipulation et traitement d’images en Python

couverture traitement images python

Dans cet article, je te présente 10 outils de manipulation et de traitement d’images Python : parmi les bibliothèques les plus utilisées, elles offrent un moyen simple et intuitif de manipuler et de transformer des images.

En bref : le traitement d’images consiste à analyser et manipuler une image numérique pour l’améliorer ou en extraire des informations. En Python, une image est un tableau NumPy, et dix bibliothèques gratuites permettent de la traiter : scikit-image, NumPy, SciPy, Pillow, OpenCV-Python, SimpleCV, Mahotas, SimpleITK, Pgmagick et Pycairo. Pour un nouveau projet, privilégie scikit-image ou OpenCV : SimpleCV n’est plus maintenu.

Tu peux aussi exécuter tous les exemples dans ce notebook Google Colab : chaque extrait de code est dans sa propre cellule, prêt à être modifié.

Qu’est-ce que le traitement d’images en Python ?

Le monde d’aujourd’hui regorge de données, et les images en constituent une part importante. Pour être exploitées, elles doivent être traitées.

Le traitement d’images consiste à analyser et à manipuler une image numérique, principalement pour en améliorer la qualité ou en extraire des informations utilisables ensuite.

Les tâches courantes incluent :

  • l’affichage des images ;
  • les manipulations de base : recadrage, retournement, rotation ;
  • la segmentation, la classification et l’extraction de caractéristiques ;
  • la restauration et la reconnaissance d’images.

Python est un choix judicieux pour ces tâches, grâce à sa popularité comme langage scientifique et à la disponibilité gratuite de nombreux outils de pointe dans son écosystème.

Passons en revue quelques-unes des bibliothèques Python les plus courantes pour manipuler des images.

1. À quoi sert scikit-image ?

scikit-image est un paquet open source Python qui fonctionne avec les tableaux NumPy. Il implémente des algorithmes et des utilitaires destinés à la recherche, à l’éducation et aux applications industrielles.

C’est une bibliothèque simple et directe, même pour ceux qui découvrent l’écosystème Python.

Ressources

Elle est très bien documentée, avec de nombreux exemples et cas d’utilisation pratiques. Lis la documentation officielle.

Usage

Le paquet s’installe avec pip install scikit-image et s’importe sous le nom skimage. La plupart des fonctions se trouvent dans des sous-modules.

Quelques exemples avec skimage.

Filtre d’image : détection des contours avec le filtre de Sobel.

import matplotlib.pyplot as plt
from skimage import data, filters

image = data.coins()
edges = filters.sobel(image)

plt.imshow(edges, cmap="gray")
plt.show()
Python
Traitement d'images en Python : filtre d'images

Correspondance de modèle (template matching) avec la fonction match_template.

Correspondance de modèle avec match_template

Tu trouveras d’autres exemples dans la galerie de scikit-image.

2. Comment NumPy permet-il de traiter une image ?

NumPy est l’une des bibliothèques fondamentales de la programmation scientifique en Python : elle gère les tableaux. Une image numérique n’est rien d’autre qu’un tableau NumPy contenant la valeur de chaque pixel.

Avec les opérations NumPy de base (découpage en tranches ou slicing, masques, indexation), on peut donc modifier directement les pixels d’une image. L’image peut être chargée avec skimage et affichée avec Matplotlib.

Ressources

Tu trouveras la liste complète des ressources dans la documentation officielle de NumPy.

Usage

Voici comment utiliser NumPy pour créer un masque sur une image : tous les pixels sombres (valeur inférieure à 87) deviennent blancs.

import matplotlib.pyplot as plt
from skimage import data

image = data.camera()
print(type(image))  # l'image est un tableau NumPy

mask = image < 87
image[mask] = 255

plt.imshow(image, cmap="gray")
plt.show()
Python
Image modifiée avec un masque NumPy

3. Que peut faire SciPy pour le traitement d’images ?

SciPy est un autre module scientifique de base de Python, comme NumPy. Il peut servir à des tâches simples de manipulation et de traitement d’images.

Son sous-module scipy.ndimage fournit des fonctions qui s’appliquent à des tableaux NumPy à n dimensions : filtrage linéaire et non linéaire, morphologie binaire, interpolation B-spline et mesure d’objets.

Ressources

Pour la liste complète des fonctions de scipy.ndimage, consulte la documentation.

Usage

Voici comment flouter une image avec un filtre gaussien (l’image de démonstration nécessite d’installer pooch avec pip install pooch) :

import matplotlib.pyplot as plt
from scipy import datasets, ndimage

face = datasets.face()
blurred_face = ndimage.gaussian_filter(face, sigma=3)
very_blurred = ndimage.gaussian_filter(face, sigma=5)

# Afficher les résultats
plt.imshow(blurred_face)
plt.show()

plt.imshow(very_blurred)
plt.show()
Python
Image floutée avec le filtre gaussien de SciPy

4. Quelle différence entre PIL et Pillow ?

PIL (Python Imaging Library) est une bibliothèque open source qui permet d’ouvrir, de manipuler et d’enregistrer de nombreux formats d’image. Son développement s’est toutefois arrêté après sa dernière version, en 2009.

Heureusement, il existe Pillow, un fork de PIL activement maintenu et plus facile à installer. Il fonctionne sur tous les principaux systèmes d’exploitation et prend en charge Python 3.

La bibliothèque propose des fonctions de traitement d’image de base : opérations ponctuelles, filtrage avec un ensemble de noyaux de convolution intégrés et conversions d’espace colorimétrique.

Ressources

La documentation contient les instructions d’installation (pip install pillow) et des exemples pour chaque module de la bibliothèque.

Usage

Voici comment améliorer le contraste d’une image avec ImageEnhance :

from PIL import Image, ImageEnhance

# Lire l'image
im = Image.open("image.jpg")

# Afficher l'image
im.show()

# Augmenter le contraste de 80 %
enh = ImageEnhance.Contrast(im)
enh.enhance(1.8).show()
Python
Image améliorée avec ImageEnhance de Pillow

5. À quoi sert OpenCV-Python ?

OpenCV (Open Source Computer Vision Library) est l’une des bibliothèques les plus utilisées pour les applications de Computer Vision. OpenCV-Python en est l’API Python, installable avec pip install opencv-python.

OpenCV-Python est rapide, car son cœur est écrit en C/C++, mais aussi facile à coder et à déployer grâce à l’interface Python. C’est un excellent choix pour les programmes de Computer Vision gourmands en calcul.

Ressources

Les tutoriels officiels OpenCV-Python facilitent la prise en main de la bibliothèque.

Usage

Cet exemple montre ce qu’OpenCV-Python sait faire : le mélange d’images avec des pyramides (pyramid blending), ici pour créer un nouveau fruit à partir d’une pomme et d’une orange.

Mélange d'une pomme et d'une orange avec OpenCV (pyramid blending)
Pyramid Blending

6. SimpleCV est-il encore utilisable ?

SimpleCV est un framework open source pour créer des applications de Computer Vision. Il donne accès à plusieurs bibliothèques de vision très puissantes, comme OpenCV, sans avoir à se soucier des profondeurs de bits, des formats de fichier ou des espaces colorimétriques. Sa courbe d’apprentissage est nettement plus douce que celle d’OpenCV.

« La Computer Vision rendue facile pour tous »

Attention : SimpleCV n’est plus maintenu et ne fonctionne qu’avec Python 2. Je le garde dans cette liste pour son intérêt historique, mais pour un nouveau projet, privilégie scikit-image ou OpenCV.

Ses points forts :

  • même les programmeurs débutants peuvent écrire des tests de vision artificielle simples ;
  • les caméras, les fichiers vidéo, les images et les flux vidéo sont tous interopérables.

Ressources

La documentation officielle est facile à suivre et contient de nombreux exemples.

Usage

Seuillage. La méthode threshold de SimpleCV passe chaque pixel en noir ou en blanc selon sa luminosité.

Image de chien : seuillage avec SimpleCV

Contours. La méthode edges passe les pixels de contour de l’image en blanc.

Image de chien : détection des contours avec SimpleCV

Points clés. Les points clés sont des zones visuellement uniques d’une image, utilisées pour la reconstruction 3D et l’appariement d’images. Avec SimpleCV, il suffit d’utiliser la méthode Image.findKeypoints.

Image de chien : points clés avec SimpleCV

7. Qu’est-ce que Mahotas ?

Mahotas est une autre bibliothèque de Computer Vision et de traitement d’images pour Python. Elle contient des fonctions classiques (filtrage, opérations morphologiques) ainsi que des fonctions de vision plus modernes pour le calcul de caractéristiques, comme la détection de points d’intérêt et les descripteurs locaux.

L’interface est en Python, ce qui convient au développement rapide, mais les algorithmes sont implémentés en C++ et optimisés pour la vitesse. Mahotas est rapide, avec un code minimaliste et très peu de dépendances.

Ressources

La documentation contient les instructions d’installation (pip install mahotas), des exemples et même quelques tutoriels pour démarrer facilement. Tu trouveras aussi la page du projet sur PyPI.

Usage

Mahotas utilise un code simple et efficace. Pour les BD « Où est Charlie ? », elle repère Charlie avec très peu de code.

On charge d’abord l’image de démonstration :

import mahotas
import mahotas.demos
import matplotlib.pyplot as plt

wally = mahotas.demos.load("Wally")
plt.imshow(wally)
plt.show()
Python
Où est Charlie ?

Puis on cherche Charlie : on repère son pull rayé avec une convolution, puis on assombrit tout le reste de l’image.

import mahotas
import mahotas.demos
import matplotlib.pyplot as plt
import numpy as np

wally = mahotas.demos.load("Wally")
wfloat = wally.astype(float)
r, g, b = wfloat.transpose((2, 0, 1))
w = wfloat.mean(2)

# Motif de rayures rouges et blanches
pattern = np.ones((24, 16), float)
for i in range(2):
    pattern[i::4] = -1

# La convolution est maximale à l'endroit du pull
v = mahotas.convolve(r - w, pattern)
mask = (v == v.max())
mask = mahotas.dilate(mask, np.ones((48, 24)))

# Assombrir tout ce qui n'est pas Charlie
np.subtract(wally, 0.8 * wally * ~mask[:, :, None], out=wally, casting="unsafe")

plt.imshow(wally)
plt.show()
Python
Charlie trouvé

8. À quoi sert SimpleITK ?

ITK (Insight Segmentation and Registration Toolkit) est un système open source multiplateforme qui offre aux développeurs une suite complète d’outils d’analyse d’images.

SimpleITK est une couche simplifiée construite sur ITK, pour faciliter son usage dans les langages interprétés. C’est une boîte à outils d’analyse d’images qui prend en charge le filtrage, la segmentation et le recalage (registration) d’images.

SimpleITK est écrit en C++ mais disponible dans de nombreux langages, dont Python (pip install SimpleITK).

Ressources

De nombreux Jupyter Notebooks illustrent l’usage de SimpleITK pour l’enseignement et la recherche, pour l’analyse d’images interactive en Python et en R. Tu peux aussi consulter les ressources ITK.

Usage

L’animation ci-dessous visualise un recalage rigide d’images CT/MR, réalisé avec SimpleITK et Python. Le code source est disponible ici.

9. Qu’est-ce que Pgmagick ?

Pgmagick est un wrapper Python de la bibliothèque GraphicsMagick. Ce système de traitement d’images, surnommé le « couteau suisse » du traitement d’images, fournit des outils robustes et efficaces pour lire, écrire et manipuler des images dans plus de 88 formats, dont DPX, GIF, JPEG, JPEG-2000, PNG, PDF, PNM et TIFF. Tu trouveras plus d’informations sur le site de GraphicsMagick.

Ressources

Le dépôt GitHub de Pgmagick contient les instructions d’installation et les prérequis (notamment l’installation de GraphicsMagick sur ta machine). Il existe aussi un guide d’utilisation détaillé.

Usage

Quelques exemples de manipulation d’images avec Pgmagick.

Mise à l’échelle d’une image :

from pgmagick import Image

img = Image("lena_std.jpg")
img.scale("200x200")
img.write("lena_scale.jpg")
Python
Mise à l'échelle d'une image avec Pgmagick

Extraction des bords :

from pgmagick.api import Image

img = Image("lena.jpg")
img.edge(2)
img.write("lena_edge.jpg")
Python
Extraction des bords avec Pgmagick

10. À quoi sert Pycairo ?

Pycairo est un ensemble de liaisons Python pour la bibliothèque graphique cairo. Cairo est une bibliothèque graphique 2D qui permet de dessiner des graphiques vectoriels, intéressants car ils ne perdent pas en netteté quand on les redimensionne ou les transforme.

Pycairo permet d’appeler les commandes de cairo depuis Python.

Ressources

Le dépôt GitHub de Pycairo est une bonne ressource, avec des instructions détaillées d’installation et d’utilisation. Le guide de démarrage propose aussi un court tutoriel.

Usage

On peut tracer des lignes, des formes de base et des gradients radiaux avec Pycairo :

import math
import cairo

WIDTH, HEIGHT = 400, 300
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT)
ctx = cairo.Context(surface)

# Fond blanc
ctx.set_source_rgb(1, 1, 1)
ctx.paint()

# Une ligne
ctx.set_source_rgb(0, 0, 0)
ctx.set_line_width(4)
ctx.move_to(20, 20)
ctx.line_to(380, 60)
ctx.stroke()

# Un rectangle rouge
ctx.set_source_rgb(0.9, 0.2, 0.2)
ctx.rectangle(30, 90, 120, 80)
ctx.fill()

# Un cercle bleu
ctx.set_source_rgb(0.2, 0.3, 0.9)
ctx.arc(250, 130, 40, 0, 2 * math.pi)
ctx.fill()

# Un gradient radial
gradient = cairo.RadialGradient(200, 230, 5, 200, 230, 60)
gradient.add_color_stop_rgb(0, 1, 1, 0)
gradient.add_color_stop_rgb(1, 0.8, 0.1, 0.1)
ctx.set_source(gradient)
ctx.arc(200, 230, 60, 0, 2 * math.pi)
ctx.fill()

surface.write_to_png("pycairo.png")
Python
Lignes, formes de base et gradients radiaux tracés avec Pycairo

Pour maîtriser Python avant de traiter des images, le parcours Python de DataXp te fait pratiquer sur des exercices corrigés, avec un coach IA qui t’aide quand tu bloques. Les premiers modules sont gratuits.

Questions fréquentes sur le traitement d’images en Python

Quelle bibliothèque Python choisir pour le traitement d’images ?

Pour un nouveau projet, privilégie scikit-image (simple, bien documentée, fonctionne avec les tableaux NumPy) ou OpenCV-Python (rapide, cœur en C/C++, adaptée à la Computer Vision). Pillow convient pour les opérations de base comme le contraste ou les conversions de couleur.

Qu’est-ce que le traitement d’images ?

C’est l’analyse et la manipulation d’une image numérique, principalement pour en améliorer la qualité ou en extraire des informations utilisables ensuite. Les tâches courantes sont l’affichage, le recadrage, le retournement, la rotation, la segmentation, la classification, l’extraction de caractéristiques et la restauration.

Comment une image est-elle représentée en Python ?

Comme un tableau NumPy contenant la valeur de chaque pixel. On peut donc modifier directement les pixels avec les opérations NumPy de base : découpage en tranches (slicing), masques et indexation.

Quelle est la différence entre PIL et Pillow ?

PIL (Python Imaging Library) n’est plus développé depuis sa dernière version, en 2009. Pillow en est un fork activement maintenu, plus facile à installer, qui fonctionne sur tous les principaux systèmes d’exploitation et prend en charge Python 3.

SimpleCV fonctionne-t-il avec Python 3 ?

Non. SimpleCV n’est plus maintenu et ne fonctionne qu’avec Python 2. Pour un nouveau projet, utilise scikit-image ou OpenCV.

Conclusion

Voici donc quelques bibliothèques de manipulation et de traitement d’images, utiles et gratuites en Python. Certaines sont très connues, d’autres seront peut-être des découvertes pour toi.

Essaie-les pour en savoir plus 🙂

Pour aller plus loin avec Python, consulte aussi notre guide des 21 astuces et concepts Python pour améliorer ton code.

Publications similaires

4 commentaires

Laisser un commentaire

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