Traitement d’images numeriques en langage python
Ce TP est une variante de celui proposé à l’adresse suivante. Dans cette version, on n’utilisera pas de matrice pour placer les informations de couleur de l’image, ce qui rend le traitement plus direct, mais moins en lien avec le programme de 1ere NSI.
Version utilisant une manipulation plus poussée de la librairie PIL.image
Le module PIL permet de manipuler divers formats d’images plus ou moins complexes sans avoir à se préoccuper de la façon dont sont réellement codés ces formats.
PIL reconnait automatique la largeur et la hauteur en pixels de l’image, permet la création d’une grille de pixels,…

Image de chatons à télécharger
Voici le programme minimal pour lire les pixels de l’image
from PIL import Image
imageSource=Image.open("chat.bmp")
largeur,hauteur=imageSource.size
planPixels=Image.new("RGB",(largeur,hauteur))
Les structures de données imageSource et planPixels sont des objets qui stockent les couleurs des pixels dans un tableau. Ces objets possède les methodes getpixel
et putpixel
suivantes:
>>> imageSource.getpixel((x,y))
retourne un tuple constitué des couleurs (R, V, B) du pixel de coordonnée (x,y)
>>> planPixels.putpixel((x,y),p)
place le tuple p de valeurs (R,V,B) sur le pixel (x,y)
Remarques:
- pour la fonction
putpixel
, la position (x,y) d’un pixel sur l’image varie de(0,0)
à(l-1,h-1)
, sil
eth
designent les dimensions de l’image. - le tuple de couleurs p: imaginons que nous voulions placer un pixel bleu, alors:
p= (0, 0, 255)
planPixels.putpixel((x,y),p)
Ecrire dans un nouveau fichier
Après lecture du fichier, on peut constituer une nouvelle image. Voici le programme complet que vous modifierez selon le traitement voulu:
### traitement d'une image ##########
from PIL import Image
imageSource=Image.open("chats.bmp")
largeur,hauteur=imageSource.size
planPixels=Image.new("RGB",(largeur,hauteur))
for y in range(hauteur): # y varie de 0 à hauteur - 1
for x in range(largeur): # x varie de 0 à largeur - 1
p=imageSource.getpixel((x,y)) # p est la valeur RGB du pixel
# la position d'un pixel sur l'image varie de (0,0) à (l-1,h-1)
planPixels.putpixel((x,y),p) # nouvelle image identique a la precedente
planPixels.save("chatModif.jpg")
planPixels.show()
Quelle opération doit on réaliser sur chacun des pixels pour que les chats regardent de l’autre côté ? Compléter le programme ci-dessus afin d’obtenir cette nouvelle image, avec des petits chats qui regardent à DROITE.
Pix-Art
Avec l’image d’origine suivante:
Marylin Monroe
Apporter les modifications necessaires pour filtrer les couleurs par zone, de manière selective. On pourra obtenir une nouvelle oeuvre inspirée de l’image suivante:

Marylin Monroe type Pop-art
Aide: La condition suivante permet de selectionner les pixels de la partie gauche de l’image, et qui ont une composante Rouge supérieure à 100:
if (x<largeur//2 & p[0] > 100) :
# traitement sur p