Revenir
Revenir

Ajouter des filtres à une image

Prérequis : maîtriser les bases de la programmation Python (variables, boucles, entrées/sorties, fon...

Sommaire

Avant de commencerPrésentationPréparationTraitement des données avec PythonImage du perroquetCouleurs pour les filtresImages du perroquet avec des filtresVers le notebook Capytale - Site

Avant de commencer

Prérequis : maîtriser les bases de la programmation Python (variables, boucles, entrées/sorties, fonctions)
Contexte de la mise en œuvre de l'activité : en classe
Ressources, matériel, documents nécessaires : bibliothèque Python (PIL)

Présentation

Comme il pourrait le faire avec un logiciel de retouche de photographies, Bob souhaiterait appliquer des filtres de couleurs sur une image. Il voudrait rendre son image rouge, verte, bleu ou encore en niveaux de gris ou en noir et blanc.
Nous allons voir comment programmer ce type de filtre en manipulant les pixels d'une image.

Préparation

La bibliothèque Python "PIL" (Python Imaging Library) permet de traiter les images dans de nombreux formats. On l’importe avec from PIL import Image.
On ouvre l'image avec img = Image.open("nom_image"), on crée une nouvelle image avec Image.new("RGB",(l,h))oùRGBest le mode couleur etl,hles dimensions.
img.sizepermet d'obtenir la taille (l × h) de l'image, img.format, le format (jpg, png, etc.) et img.modele mode couleur (RVB) ou niveaux de gris (L) de l'image.
On utilise la méthode getpixel((x,y)) pour obtenir les informations sur le pixel de coordonnées x, y. Pour lire les pixels aux coordonnées (5, 3) , on donne l'instruction img.getpixel((5,3)))et pour écrire un pixel à ces mêmes coordonnées on aimg.putpixel(5,3),(255,0,0))
Pour transformer une image en niveaux de gris, nous utilisons la méthode convert()  comme suit : imgNG = img.convert(‘L’), "L"étant le mode niveaux de gris.

Traitement des données avec Python

Nous allons aborder les fonctions succinctes qui nous permettrons de filtrer l'image.
Exécutez le programme suivant : 
from PIL import Image
img = Image.open("couleurs.jpg")
print("Format, taille et codage de l'image :")
l, h = img.size
formI=img.format
codeI=img.mode
print(formI, l, h, codeI )
imshow(img)   #affiche l'image
1. Afin d'afficher les codes RVB de chaque pixel de l'image, nous devons réaliser la lecture de tous les pixels d'une ligne et ce, sur chaque ligne. Nous devons alors réaliser une boucle qui se déplace en x sur toute la largeur dans une autre boucle qui se déplace en y sur toute la hauteur. Complétez la procédure "affichePix(image)" qui affiche tous les pixels de l'image.
def affichePix(image):
   l,h = image.size
    for y in range(h):
        # A compléter
affichePix(img)
Pour effectuer des modifications sur une image, nous devons créer une nouvelle image RVB ayant les mêmes dimensions que la première : newimg = Image.new("RGB", (l,h))
Nous pouvons alors remplir cette nouvelle image avec des pixels : newimg.putpixel((x,y),(rvb[0],rvb[1],rvb[2])).
Pour créer un filtre de couleur rouge sur l’image, il suffit de supprimer les pixels Verts et Bleus et de garder uniquement les pixels Rouges. Vous devez donc :
  • Créer une nouvelle image de dimensions l, h
  • Pour chaque pixel, lire le pixel de l'image d'origine, le modifier et le placer dans la nouvelle image
2. Réalisez la fonction filtreR() qui prend comme paramètre l’image "perroquet.jpg" et retourne la nouvelle image filtrée. Affichez la à l’écran.
    l,h = image.size
    newimg = Image.new("RGB",(l,h))
    # A compléter
    return newimg
img2 = Image.open("perroquet.jpg")
perroquetR = filtreR(img2)
img2.show()
Pour transformer une image en niveaux de gris, nous utilisons la méthode convert() comme suit : imgNG = img.convert(‘L’).
3. Transformez l’image en niveaux de gris "perroquetNG" et l'afficher.
On désire transformer l'image en niveau de gris précédente par une image en noir et blanc. Nous devons donc remplacer les pixels inférieurs à 128 par 0 et ceux supérieurs à 128 par 255.
4. Complétez et exécutez le programme suivant :
l, h = perroquetNG.size
perroquetNB = Image.new("L",(l,h))
# A compléter

Image du perroquet

Couleurs pour les filtres

Images du perroquet avec des filtres

Vers le notebook Capytale - Site