Outils pour utilisateurs

Outils du site


snt:image

Traitement d'image

Activités en Python

Lena

Un grand nombre de fonctions sont disponibles dans la bibliothèque PIL (Python Imaging Library) disponible dans le paquetage Pillow, dont voici un manuel.

Après avoir installé Pillow si nécessaire :

# Par exemple :
pip install pillow
# à adapter selon distribution de Python (conda etc.)

On dispose de la bibliothèque PIL proposant plusieurs modules, dont Image, qui met à disposition une classe d'objets du même nom.
De très nombreux formats de fichiers d'images sont utilisables, et reconnus par leur extension.

Exemple de traitement

L'exemple suivant consiste à ouvrir une image couleur dans un fichier jpg, la charger en mémoire, créer une autre image - en niveaux de gris cette fois - dont les pixels auront pour valeur la moyenne des composantes de l'image couleur, et enfin enregistrer cette nouvelle image dans un fichier png.

from PIL import Image
 
# Ouverture d'un fichier et affectation à un objet de la classe Image
mon_image = Image.open("lena.jpg")

Ici, mon_image, objet de la classe Image est un tableau de pixels, composé de 1 à 4 valeurs numériques en fonction du type de fichier (1 entier pour une image en niveau de gris, 3 pour une image couleur RVB et 4 pour une image couleur CMYK.

Par ailleurs, un objet de la classe Image, est un tuple : il n'est pas mutable. On ne peut donc pas modifier directement un élément, il faudra passer par une recopie dans un autre objet.

On peut obtenir des caractéristiques de cet objet :

print("Format : ", mon_image.format) # Format de fichier
largeur, hauteur = mon_image.size # Tuple l, h en pixels
print("Taille : ", largeur, "x", hauteur)
print("Mode : ", mon_image.mode) # L (luminance), RGB, CMYK...
mon_image.show() # affichage de l'image via le programme par défaut du système

Pour les méta-données exif, et en particulier GPS, voir mon_image._getexif() en particulier.
Exemples ici et .

Pour accéder à un pixel :

pixou = (10,10) # par exemple... pixel de coordonnées (10,10). La numérotation commence à 0
couleurs = mon_image.getpixel(pixou) # Retourne un tuple contenant les 3 composantes r, g, b
print(couleurs)

Pour créer une nouvelle image :

nouvelle_image = Image.new("L", mon_image.size) # L : mode niveaux de gris

Écrire des pixels dans l'image :

for i in range(largeur):
    for j in range (hauteur):
        r, g, b = mon_image.getpixel((i,j))
        moy = int((r + g + b)/3)
        nouvelle_image.putpixel((i,j), moy)

Enregistrer l'image dans un fichier :

nouvelle_image.save("image_modif.png") # L'extension détermine le format de fichier
 
# fermeture des fichiers
mon_image.close()
nouvelle_image.close()
snt/image.txt · Dernière modification: 2022/02/24 10:55 de jbpuel