Exercice 1
Modifier ce script pour pouvoir afficher l'image en couleur et celle en gris l'une à côté de l'autre comme la figure ci-dessus.
On a déjà vu que chaque pixel d’une image est repéré par ses coordonnées (x, y) et ses composantes (R,V,B). Dans certains formats d’image, chaque pixel porte une autre information appelée « canal alpha » : il s’agit d’un nombre compris entre 0 et 255, qui indique la transparence du pixel (il vaut 0 pour un pixel transparent et 255 pour un pixel opaque).
r,v,b,a=im_0.getpixel (( x , y ))
Dans ces instructions, les coordonnées (x, y) sont données par rapport au coin supérieur gauche de l’image im_0 (et pas par rapport au coin de la fenêtre).
On a déjà vu comment récupérer les dimensions de l'image im_0
largeur,hauteur=im_0.size
On a aussi vu comment créer une nouvelle image de largeur L et de hauteur H :
im_1=Image.new("RGB" , ( L, H )) # Création d'une nouvelle image nommée im_1 de dimensions L et H
im_1.putpixel((x,y),(r,v,b))
L’exemple que nous allons décrire permet de transformer une image en couleurs en une image en niveaux de gris.
Pour cela, il est nécessaire d’agir sur tous les pixels, les uns après les autres : à l’aide de deux boucles for imbriquées, on devra donc parcourir l’image entière par lignes et par colonnes. Pour chaque pixel, on calcule d’abord la valeur moyenne de ses trois composantes :
\[ g=\frac{0.11\times r+v+b}{3}\]On remplace ensuite, pour ce pixel, la couleur (r, v, b) par la couleur (g, g, g).
Voici un script permettant de transformer une image en couleurs en une image en niveaux de gris :
from PIL import Image
imageSource=Image.open( "Images/perroquet.jpg" )
largeur , hauteur=imageSource.size
imageBut=Image.new("RGB" , ( largeur , hauteur ))
for y in range (hauteur) :
for x in range (largeur) :
r,v,b=imageSource.getpixel (( x , y ))
g=(0.11r+v+b)//3
imageBut.putpixel((x,y),(g,g,g))
imageBut.save("Images/perroquetGris.jpg" )
imageBut.show( )
Modifier ce script pour pouvoir afficher l'image en couleur et celle en gris l'une à côté de l'autre comme la figure ci-dessus.
Rédiger un script donnant les trois canaux de l'image ci-dessous :
Pour obtenir les images séparées suivantes :