Traitement d’images (2)

Correction de l’exercice pour aujourd’hui.


TP : traitement d’image pixel par pixel avec PIL/pillow

On part de cette image, à enregistrer dans le dossier de travail sous « taormine.jpg ».

taormine

Attention : pour aujourd’hui, on devait installer la bibliothèque « pillow »

pip install pillow

Tester ce code :

import PIL.Image as Image
im = Image.open('taormine.jpg')
print("Image chargée")
# on récupère les dimensions
largeur,hauteur=im.size
pix = im.load() # pix est notre tableau de pixels

# niveaux de gris
print("Début du traitement N&B")
for y in range(hauteur):
    for x in range(largeur):
        r, v, b = pix[x, y] # attention syntaxe PIL
        moyenne = (r + v + b) // 3
        pix[x,y] = (moyenne, moyenne, moyenne)
# sauvegarde
im.save('N&B.jpg')
print("Image N&B enregistrée")
print("Fin du traitement N&B")

C’est du noir et blanc, ou plutôt du « niveau de gris ».

En séance à distance, après de longues longues minutes de galère (technique), on a pu avec Vico (merci) arriver à ce code qui combine le « seuil » et la « symétrie verticale », ouf :

effet_Viko

import PIL.Image as Image
im = Image.open('taormine.jpg')
print("Image chargée")
# on récupère les dimensions
largeur,hauteur=im.size
pix = im.load() # pix est notre tableau de pixels

# seuil de 150
for y in range(hauteur):
    for x in range(largeur):
        r, v, b = pix[x, y] # attention syntaxe PIL
        moyenne = (r + v + b) // 3
        if moyenne > 150:
            pix[x,y] = (255, 255, 255)
        else:
            pix[x,y] = (0, 0, 0)

# symétrie verticale
for y in range(hauteur//2):
    for x in range(largeur):
        # interversion pixel du haut et pixel du bas
        pix[x, y], pix[x, hauteur - 1 - y] = pix[x, hauteur - 1 - y], pix[x, y]

# sauvegarde
im.save('effet_Viko.jpg')
print("Image effet Viko enregistrée")

A CONTINUER !! Reste à obtenir toutes celles-là ! Et d’autres ?

Et le challenge « ultimate » :

ultimate_taormine

Conseils :

  • Commencer déjà par agencer les quatre images sans vous préoccuper de l’effet de réductions successives au centre : c’est déjà énorme ! Step by step !
  • Pour une nouvelle image plus grande, carrée, de côté largeur + hauteur, faites de pixels noirs, on peut commencer par :
im = Image.new("RGB", (largeur + hauteur, largeur + hauteur), (0, 0, 0))

Avec une image plus « frise » (la largeur est nettement plus grande que la hauteur), ça peut vite donner le tournis 😉

 

N'hésitez-pas à poser une question, ou faire avancer le schmilblick

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.