Traitement d'images avec Pillow

Pillow est une bibliothèque de traitement d'images dérivée du projet PIL (Python Image Library), le développement de PIL ayant été abandonné. Elle contient de nombreux outils très puissants pour manipuler ou créer des images dans les formats les plus répandus (JPEG, PNG, GIF, TIFF, BMP, ...)

 Avant de commencer

  • Une image sur un écran de téléphone, tablette, ordinateur ou téléviseur est un regroupement de points lumineux appelés pixels. (Par exemple, un écran de téléviseur 4K UHD possède 3840 pixels de largeur sur 2160 pixels de haut soit 8294400 points)
  • Chacun de ses points a une couleur. Cette couleur est définie par un mode par exemple le mélange de Rouge Vert Bleu (RVB, RGB en anglais).
  • Quand on associe tous ces points de couleur, cela forme une image.

 Afficher les caractéristiques d'une image

from PIL import Image

# ouverture d'une image (mon_image.jpg à remplacer par votre image)
image = Image.open('R2D2.jpg')  

# informations sur l'image
type = image.format         # récupère le format de l'image : JPEG, GIF, PNG,...
largeur = image.size[0]         # récupère la largeur en pixels (nombre de points)
hauteur = image.size[1]         # récupère la hauteur en pixels (nombre de points)
mode = image.mode           # récupère le mode couleur (RGB, ...)

print('Format de l\'image : ', type)
print('Hauteur de l\'image : ', hauteur)
print('Largeur de l\'image : ', largeur)
print('Mode couleur : ', mode)

# affichage de l'image
image.show()

```python

### Sauvegarder une image

On reprend l'exemple suivant et la partie du programme qui permet de charger l'image (au format JPEG). On ajoute une partie de code qui permet de sauvegarder cette image sous autre format (PNG).

```python

from PIL import Image   

# ouverture d'une image (mon_image.jpg à remplacer par votre image)
image = Image.open('R2D2.jpg')

## sauvegarde de l'image

# on essaie de sauvegarder l'image
try:
   image.save("R2D2.png", "PNG")

# si une exception est levée, on affiche un message d'avertissement 
except IOError:
   print("Erreur d'enregistrement !")   

 Rognage d'une image

Rogner une image, c'est retirer une partie des bords de cette dernière pour zoomer sur la partie qu'il apparaît intéressant d'isoler.


from PIL import Image

# ouverture d'une image (mon_image.jpg à remplacer par votre image)
image = Image.open('R2D2.jpg')

# rognage de l'image
image_rognee = image.crop((1000, 400, 1320, 800))
image_rognee.show()

Pour rogner l'image, on utilise image.crop(x1,y1,x2,y2):

  • x1,y1 : coordonnées du coin supérieur gauche de la nouvelle image
  • x2,y2 : coordonnées du coin inférieur droite de la nouvelle image

 Conversion d'une image couleur en niveaux de gris


from PIL import Image

image = Image.open('R2D2.jpg')

image_gris = image.convert('L')
image_gris.show()

 Manipulation des pixels

Pillow propose deux fonctions intéressantes pour manipuler chaque point de l'image (appelé pixel) : getpixel et putpixel

 --- Getpixel

getpixel(x,y) est une méthode qui renvoie les valeurs de couleur (rouge, vert, bleu) du pixel situé en (x,y)

from PIL import Image

image = Image.open('R2D2.jpg')

r, v, b = image.getpixel((0,0))
print("Canal rouge : ", r, "Canal vert : ",v ,"Canal bleu : ", b)

Ce code retourne le résultat suivant :

Canal rouge :  183 Canal vert :  24 Canal bleu :  90

En cours de rédaction...