Vous êtes sur la page 1sur 6

Master M2SI-2022-2023

Programmation Python

TP 03 : Traitement d’Image avec Python

Exercice 1 :
Vous devez créer des scripts en utilisant Image de PIL pour (importer le module Image de
PIL) :
- afficher la taille et le format de l'image,
- afficher la valeur du pixel de coordonnée (45,67),
- modifier sa valeur pour qu'elle soit égale à (250,250,250)
- enregistrer l'image sous le nom de simple_manipulation.png
- afficher l'image avec Python.
Voir le Scripte suivant :

from PIL import Image


def main():
img=Image.open('C:\image.jpg')
#un tuple de cordonnées nombre de lignes et de colonnes
a=img.size
#le nombre de lignes

print(a[0])
#le nombre de colonnes
print(a[1])
#af chage du format de l'image jpeg, png, ..
print(img.format)
#accéder aux contenu d'un pixel
print('la valeur du pixel de cordonnées (45,67) est', img.getpixel((45,67)))
#modi cation de la valeur d'un pixel
img.putpixel((45,67),(234,250,45))
#sauvegarde de la modi cation

img.save('nouvelle_image.png')
#l'af chage de l'image
img.show()
#fermeture de l'image

1

fi
fi
fi
fi
Master M2SI-2022-2023
Programmation Python

img.close()
return

Information :
Le pixel en (0,0) correspond au pixel le plus en haut à gauche de l'image. La première
coordonnée croît lorsqu'on se déplace vers la droite de l'image, et la seconde croît lorsqu'on se
déplace vers le bas de l'image.

Exercice 2 :
Créez un script qui affiche l'image avec seulement deux couleurs : le noir et le blanc.
Voir le Scripte suivant :

from PIL import Image

def main():

from PIL import Image

img = Image.open('C:\image.jpg')

size = img.size

for i in range(size[0]):

for j in range(size[1]):
if img.getpixel((i,j))[0] < 255 or img.getpixel((i,j))[1] < 255 or img.getpixel((i,j))[2] < 255 :

img.putpixel((i,j),(0,0,0))

img.show()

img.close()

return

Explication :

Boucle for 1 : On parcourt l'image en largeur :


Boucle for 2 : On parcourt l'image en hauteur :
Si l'une des valeurs du pixel (obtenues par la méthode getpixel) considéré n'est pas
égale à 255, alors c'est qu'il ne s'agit pas d'un pixel blanc.
On rend le pixel noir en lui donnant la valeur (0,0,0) à l'aide de putpixel.

2

Master M2SI-2022-2023
Programmation Python

Exercice 3 :

Créez un script qui af che l'image en nuance de gris.

Voir le Scripte suivant :

from PIL import Image


img = Image.open("c:\image.jpg")
size = img.size
for i in range(size[0]) :
for j in range(size[1]) :
val = int((img.getpixel((i,j))[0] + img.getpixel((i,j))[1] + img.getpixel((i,j))[2])/3)
img.putpixel((i,j),(val,val,val))
img.show()
img.close()

N.B : pour tout pixel : on récupère la moyenne des trois valeurs du pixel i,j dans la
variable val (pour avoir la nuance).

Exercice 4 :
Créez un script qui af che une nouvelle image correspondant au symétrique de
l'image.
from PIL import Image
img = Image.open("C:\image.jpg")
size = img.size
imgNew = Image.new(img.mode,size)
for i in range(size[0]):
for j in range(size[1]):
color = img.getpixel((i,j))
imgNew.putpixel((size[0]-i-1,j),color)
imgNew.show()
img.close()

ATTENTION !!! Le pixel en (0,0) correspond au pixel le plus en haut à gauche de


l'image. La première coordonnée croît lorsqu'on se déplace vers la droite de
l'image, et la seconde croît lorsqu'on se déplace vers le bas de l'image.

Exercice 5 :
Créez un script qui affiche une nouvelle image correspondant à l'image quatre fois plus
petite.

3

fi
fi
Master M2SI-2022-2023
Programmation Python

from PIL import Image


import numpy as np
img = Image.open("C:\image.jpg")
size = img.size
imgNew = Image.new(img.mode,(int(np.ceil(size[0]/2)),int(np.ceil(size[1]/2))))
for i in range(size[0]):
for j in range(size[1]):
if (i+j)%4 == 0:
color = img.getpixel((i,j))
imgNew.putpixel((i//2,j//2),color)
imgNew.show()
img.close()

N.B :
On crée une nouvelle image via la fonction new qui prend en paramètres le mode et
la taille de la nouvelle image.
Ici, la taille de la nouvelle image est celle de l'image de base divisée par 2 pour
chaque dimension. On prend la partie entière supérieure à l'aide de la fonction ceil
de numpy, et on convertit ce nombre en un integer à l'aide de la fonction int.
Boucle for 1 : On parcourt l'image en largeur :
Boucle for 2: On parcourt l'image en hauteur :
Pour diviser la taille de l'image par 4 sans trop la
détériorer, on garde 1 pixel sur 4. Ainsi, on garde un pixel tous les 4 pixels (i.e. tous
les pixels de numéros i+j multiples de 4). S'il s'agit d'un de ces pixels :
On récupère la couleur du pixel
On donne cette couleur au pixel dont les coordonnées
sont 2 fois plus petites (sans oublier de prendre le partie entière, d'où l'opération //).

Exercice 6 :
Créez un script qui af che une nouvelle image de même taille que image.jpg et
composée de 4 reproductions de cette image.

from PIL import Image


import numpy as np
img = Image.open("C:\image.jpg")

4

fi
Master M2SI-2022-2023
Programmation Python

size = img.size
imgNew = Image.new(img.mode,(2*int(np.ceil(size[0]/2)),2*int(np.ceil(size[1]/
2))))
for i in range(size[0]):

for j in range(size[1]):
if (i+j)%4 == 0:
color = img.getpixel((i,j))
imgNew.putpixel((i//2,j//2),color)
imgNew.putpixel((i//2 + int(np.ceil(size[0]/2)),j//2),color)
imgNew.putpixel((i//2,j//2 + int(np.ceil(size[1]/2))),color)
imgNew.putpixel((i//2 + int(np.ceil(size[0]/2)),j//2 + int(np.ceil(size[1]/
2))),color)
imgNew.show()

img.close()

Exercice 7 :

Ecrivez un script qui permet de changer le mode d’une image couleur à une image
niveau de gris à l’aide de la fonction convert (RGB to L).

from PIL import Image


image = Image.open("C:\image.png")

image = image.convert('L') “le mode grau scal”


image.show()
image.save('gray.jpg', 'jpg')

Quelques Manipulations
Séparation des canaux
r, v, b = img.split()
r.show()
v.show()
b.show()

Transformations géométriques Rotation

5

Master M2SI-2022-2023
Programmation Python

imgNew = img.rotate(45)

Redimensionnement
imgNew = img.resize((100, 250))

6

Vous aimerez peut-être aussi