SNT:tp3-images

1. Mise en place

  • créer un dossier TP3_images,
  • télécharger et enregistrer les images suivantes dans ce dossier
  • ouvrir pizo et copier-coller le code ci-dessous
from PIL import Image # on importe la classe Image et ses méthodes de la
# bibliothèque Pillow alias PIL

image = Image.open("Mona_lisa.jpg") # Chargement d'une image avec PIL
# image est déclarée comme un objet de la classe Image de PIL

def taille(img):
    return img.size # méthode propre à la classe Image

def format(img):
    return img.format # méthode propre à la classe Image

def lire_pixel(img,x,y):
    return img.getpixel((x,y)) # méthode propre à la classe Image

def changer_pixel(img,x,y,couleur):
    image=img
    image.putpixel((x,y),couleur) # méthode propre à la classe Image
    return image

def afficher(img):
    img.show()

# premieres fonctions de traitement de l'image

def filtre1(img,e):
    image_retour=img.copy()
    (l, h) = taille(image)
    for y in range(h):
        for x in range(l):
            c = lire_pixel(image_retour,x,y)
            nouvelle_c=(c[0]+e,c[1]+e,c[2]+e)
            image_retour=changer_pixel(image_retour,x,y,nouvelle_c)
    afficher(image_retour)
    return image_retour

def canal_R(img):
    image_retour=img.copy()
    (l, h) = taille(image)
    for y in range(h):
        for x in range(l):
            c = lire_pixel(image_retour,x,y)
            nouvelle_c=(c[0],0,0)
            image_retour=changer_pixel(image_retour,x,y,nouvelle_c)
    afficher(image_retour)
    return image_retour

def enregistrer(img,nom):
    img.save(nom+".jpg")
    img.save(nom+".png")
  • enregistrer votre fichier avec le nom TP3 dans votre dossier,
  • indiquer à pizo votre dossier comme répertoire courant avec l’outil « File Browser »,
  • exécuter votre programme.

Exercice 1

Tester les commandes :

>>>image1=filtre1(image,10)
>>>image2=filtre1(image,-10)

Que remarquez-vous ? Tester la fonction filtre1 avec d’autres valeurs pour le 2° paramètres.

Exercice 2

Tester la commande :

>>>imageR=canal_R(image)

Enregistrer l’image obtenue avec la commande :

>>>enregistrer(imageR,"Mona_Lisa_R")
  • En vous inspirant de la fonction canal_R(), écrire une fonction canal_V() et une fonction canal_B() permettant d’extraire respectivement le canal bleu et le canal bleu d’une image,
  • enregistrer aux noms « Mona_Lisa_V » et « Mona_Lisa_B » vos deux images obtenues à l’aide de ses fonctions.
  • Tester vos 3 fonctions avec l’image Mondrian.

Exercice 3

Ajouter à votre programme les fonctions suivantes.
– Après exécution, tester les commandes symetrie(image), symetrie_1(image) et symetrie_2(image).
– tester les commandes photomaton(image) et boucle_photomaton(image,8),
– modifier le programme pour qu’il télécharge en image l’image de Mona Lisa réduite. Tester à nouveau les commandes photomaton(image) et boucle_photomaton(image,8),

def symetrie(img):
    image_retour=img.copy()
    (l, h) = taille(image)
    for y in range(h):
        for x in range(l):
            c = lire_pixel(image,x,y)
            image_retour=changer_pixel(image_retour,l-1-x,y,c)
    afficher(image_retour)
    return image_retour

def symetrie_1(img):
    image_retour=img.copy()
    (l, h) = taille(image)
    for y in range(h):
        for x in range(l):
            c = lire_pixel(image_retour,x,y)
            image_retour=changer_pixel(image_retour,l-1-x,y,c)
    afficher(image_retour)
    return image_retour

def symetrie_2(img):
    image_retour=img.copy()
    (l, h) = taille(image)
    for y in range(h):
        for x in range(l):
            c = lire_pixel(image_retour,l-1-x,y)
            image_retour=changer_pixel(image_retour,x,y,c)
    afficher(image_retour)
    return image_retour

def photomaton(img):
    '''
    ne fonctionne qu'avec une image de dimensions paires
    '''
    image_retour=img.copy()
    (l, h) = taille(image)
    l1=int(l/2)
    h1=int(h/2)
    for x in range(0,l-1,2):
        for y in range(0,h-1,2):
            pixel1 = lire_pixel(img,x,y)
            pixel2 = lire_pixel(img,x+1,y)
            pixel3 = lire_pixel(img,x,y+1)
            pixel4 = lire_pixel(img,x+1,y+1)
            x1=int(x/2)
            y1=int(y/2)
            image_retour=changer_pixel(image_retour,x1,y1,pixel1)
            image_retour=changer_pixel(image_retour,x1+l1,y1,pixel2)
            image_retour=changer_pixel(image_retour,x1,y1+h1,pixel3)
            image_retour=changer_pixel(image_retour,x1+l1,y1+h1,pixel4)
    afficher(image_retour)
    return image_retour

def boucle_photomaton(img,n):
    image_retour=img.copy()
    for i in range(n):
        image_retour=photomaton(image_retour)
    return image_retour

Pour en savoir plus :
https://images.math.cnrs.fr/Le-traitement-numerique-des-images.html