Débuter avec la bibliothèque PIL en SNT
1. Le module Pil(low)
Présentation
Pillow est une bibliothèque de traitement d'image, successeur du projet PIL (Python Imaging Library). Elle est conçue de manière à offrir un accès rapide aux données contenues dans une image,
et offre un support pour différents formats de fichiers tels que PPM, PNG, JPEG, GIF, TIFF et BMP.
Pillow dispose de capacités de traitement d'images relativement puissantes, et a pour but d'offrir une solide base à toute application générale de traitement d'images.
Le programme doit commencer par from PIL import Image
pour importer les fonctions du module, qui seront ensuite préfixées par Image
.
Les attributs d'une image
La bibliothèque utilise le principe d'images matricielles c'est-à-dire que chaque élément de la matrice représente un point avec une couleur associée (= un pixel) selon différents modes possibles.
Les modes les plus connus sont :
- L (nuances de gris),
- RGB (couleur)
- et RGBA (couleur et transparence),
qui représentent respectivement les pixels sur 8 bits, 3x8 bits et 4x8 bits.
On ouvre un fichier avec la fonction open(nom_fichier)
où nom_fichier
est le nom complet du fichier (nom et extension) écrit entre guillemets ; cette instruction renvoie un objet Image
contenant les données du fichier que l'on pourra ensuite manipuler.
Voici quelques attributs d'un tel objet :
format
: indique le format de l'image PPM, PNG, JPEG, GIF, TIFF et BMP.mode
: indique le mode L, RGB, RGBAsize
: indique la taille de l'image sous la forme d'un couple (largeur, hauteur)width
: indique le nombre de pixels en largeurheight
: indique le nombre de pixels en hauteur
Exemple
En utilisant l'image sous le titre
from PIL import Image
img = Image.open("pillow.png")
print("le format est", img.format)
print("le mode est", img.mode)
largeur, hauteur = img.size
print("le nombre de pixels en largeur est", largeur)
print("le nombre de pixels en hauteur est", hauteur)
le format est PNG
le mode est RGBA
le nombre de pixels en largeur est 160
le nombre de pixels en hauteur est 161
Méthodes disponibles
Les méthodes à appliquer aux objets Image
sont :
close()
ferme l'image chargée en mémoire ;show()
afficher l'image dans un outil externe ;save(nom_fichier, format)
sauvegarde l'image dans le format spécifié par l'extension ;getpixel(x, y)
récupère les attributs du pixel à la positionx, y
;putpixel((x, y), (r, g, b))
modifie les attributs du pixel à la position donnée ; par exemple, ici pour un mode RGB.
Remarque
Les coordonnées d'un pixel sont définies dans un repère où l'origine est le point en haut à gauche, l'axe des abscisses est orienté dans le sens gauche-droite et l'axe des ordonnées dans le sens haut-bas.
Exemple
from PIL import Image
img = Image.open("pillow.png")
img.show()
print("le pixel (50, 50) est codé par :", img.getpixel((50, 50)))
for x in range(60, 101):
for y in range(60, 101):
img.putpixel((x, y), (180, 180, 180, 255))
img.show()
# on ferme !
img.close()
Fonctions de traitement d'image prédéfinies
Il existe d'autres fonctions du module Image
qui permettent de faire du traitement d'images automatiquement :
copy()
: permet de faire une copie de l'imageconvert("L")
: permet de convertir en nuances de grisconvert("RGB")
: permet de convertir en RGBconvert("1")
: permet de convertir en noir et blancresize((L, H))
: permet de modifier la taille de l'imagerotate(angle)
: permet de faire une rotation de angle dans le sens anti-horaire
Exemple
from PIL import Image
img = Image.open("pillow.png")
largeur, hauteur = img.size
imgNB = img.convert("L")
imgNB.show()
imgPetit = img.resize((largeur // 2, hauteur // 2))
imgPetit.show()
imgR = img.rotate(45)
imgR.show()
# on ferme !
img.close()
En savoir plus
En savoir plus sur le module Image
2. Parcours Manipulation d'images
Sur Capytale
Se connecter à l'ENT puis ouvrir le notebook sur Capytale