Traitement d'images

Lecture et écriture d’un pixel

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).

Un exemple : Niveau de gris

L’exemple que nous allons décrire permet de transformer une image en couleurs en une image en niveaux de gris.

pixels

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( )

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.

Exercice 2

Rédiger un script donnant les trois canaux de l'image ci-dessous :

pixels

Pour obtenir les images séparées suivantes :

pixels
pixelspixels