Logo de kxs.frCours d'informatique pour le lycée et la prépa

Modification d'une image

Introduction

Nous avons vu dans le précédent TP qu’une image était composée de pixels dont la couleur était crée par un triplet (r, g, b) des trois couleurs primaire (rouge, vert, bleu). Nous allons voir dans ce TP comment modifier une image en lui appliquant des filtres que vous allez créer avec Python.

Filtres

Nous utiliserons le module pillowSNT pour simplifier la manipulation des images. Pour utiliser ce module il faut télécharger le fichier et le placer dans le même répertoire que votre fichier Python puis placer au début de votre fichier la commande suivante :

from pillowSNT import *

Ce module met à votre disposition les fonctions suivantes :

ouvrir(nom) : renvoie l’image « nom ». Exemple :

image = ouvrir("maison.jpg")

afficher(image) : affiche image. Exemple :

afficher(image)

filtrer(image, filtre) : applique le filtre filtre à l’ensemble des pixels de l’image et renvoie une nouvelle image. Exemple :

image2 = filtrer(image, filtre)

sauver(image, nom) : enregistre l’image avec le nom « nom ». Exemple :

sauver(image2, "nouvelleimage.jpg")

Affichage d’une image avec Python

Nous allons créer notre premier filtre avec Python.

Commencez par télécharger cette image que vous placerez dans le dossier ou vous avez téléchargé le module pillowSNT.py. Créez un nouveau ficher Python et enregistrez-le avec le nom filtrespython.py. Dans ce fichier recopiez le code ci-dessous :

from pillowSNT import *

image = ouvrir("paysage.jpg")
afficher(image)

Exécutez le programme : normalement votre image doit apparaître.

Filtre rouge

Nous allons maintenant créer un filtre rouge. Modifiez votre fichier pour avoir le code suivant :

from pillowSNT import *

def rouge(r, g, b):
    return (r, 0, 0)

image = ouvrir("paysage.jpg")
newimage = filtrer(image, rouge)
afficher(image)
afficher(newimage)

Les deux lignes avec def et return créent un filtre nommé rouge qui lorsqu’il reçoit un triplet (r, g, b) ne renvoie que la composante rouge et met le vert et le bleu à zéro.

La ligne avec newimage applique le filtre rouge à image et stocke la nouvelle image dans newimage.

Exécutez le programme : normalement la première image et l’image filtrée doivent apparaître.

Filtres vert et bleu

1) Créez deux nouveaux filtres vert et bleu sur le même modèle que le rouge.

Filtre gris

2) Ouvrez votre image dans Gimp et transformez-la en niveaux de gris (images → mode → niveaux de gris). Ensuite, ouvrez le sélecteur de couleurs et avec la pipette sélectionnez différents pixels à l’écran. Observez les valeurs de r, g et b. Que constatez-vous ?

3) Créez un filtre gris qui remplace chaque composante r, g et b par la moyenne des trois composantes. On pourra utiliser la division entière pour avoir un entier en faisant la moyenne.

Ce dernier filtre peut être amélioré pour prendre en compte la sensibilité de l’œil aux différentes couleurs. Pour cela, on remplacera la moyenne par la formule ci-dessous :

m = (21*r + 71*g + 8*b) // 100

4) Créez un nouveau filtre grisbest qui applique cette formule.

Filtre négatif

5) Ouvrez à nouveau votre image dans Gimp et inversez les couleurs (couleurs → inverser).

6) Créez un filtre negatif qui remplace chaque composante de couleur par son complément à 255 (255 - r,…). Comparez votre résultat à celui de Gimp.

Filtre noir et blanc

Pour mettre l’image en noir en blanc on part du filtre gris. Si la valeur du gris est supérieure à 50 on remplace les trois composantes rgb par 255. Sinon on remplace les trois composantes rgb par 0.

7) Créez un filtre NB qui transforme une image en noir et blanc.

Filtre libre

8) Créez un filtre de votre choix et montrez-le au professeur.