Manipulation d'images en Python
Découverte de PIL
Charger une image
from PIL import Image
image = "feudartifice.jpg"
im = Image.open(image)
print("Voici les propriétés de l'image :", im.format, im.size, im.mode)
Que signifient les trois valeurs qui s'affichent ?
Les pixels de l'image
lire un pixel
On peut afficher les composantes (R,V,B) d'un pixel grâce à la fonction getpixel((x,y))
. Attention aux double parenthèses !x
et y
représentent les positions respectivement horizontale et verticale du pixel dans l'image, en sachant que l'origine (0,0) correspond au coin supérieur gauche.
Par exemple :
from PIL import Image
image = "feudartifice.jpg"
im = Image.open(image)
print("Voici les propriétés de l'image :", im.format, im.size, im.mode)
print(im.getpixel((92,15)))
print(im.getpixel((600,600)))
modifier un pixel
On peut également modifier un pixel, grâce à la fonction putpixel((x,y), (r, v, b))
.
Par exemple, la commande im.putpixel((84, 42), (0,0,0))
va avoir pour effet de modifier la couleur du pixel aux coordonnées (84,42). Sa nouvelle couleur sera (0,0,0), soit noir.
Modifier une image
Nous allons transformer l'image du feu d'artifice en niveaux de gris (noir et blanc). Nous avons vu précédemment que le noir est codé en RVB (0,0,0) et que blanc est codé (255, 255, 255). Nous pouvons ajouter une information importante pour la suite : toutes les nuances de gris sont composées de la même valeur pour R, V et B.
Copier le code suivant à la place du précédent.
from PIL import Image
image = "feudartifice.jpg"
im = Image.open(image)
(l,h) = im.size #on a dans l la largeur et dans h la hauteur
#maintenant, on créé une nouvelle image aux mêmes dimensions
image_nb = Image.new('RGB', (l,h))
for i in range(500):
for j in range(300):
(r,g,b) = im.getpixel((i,j))
moy = round(255)
image_nb.putpixel((i,j), (moy,moy,moy))
image_nb.save("image_nb.jpg")
Modifions ensemble ce code pour obtenir ce que l'on veut !