SNT Seconde

Traitement d'Image


Nous allons voir comment modifier les pixels des photos pour obtenir différents effets.

Mise en évidence d'une couleur, transformation en noir et blanc, détection de contour ...

Cela vous permettra de voir ce qu'on peut faire avec un langage de programmation comme Python.

1 - Boucle For

Modifiez un pixel c'est déjà bien, mais comment faire pour modifier plusieurs pixels ?
La réponse est simple, nous allons utiliser des boucles FOR.

La structure de la boucle for est la suivante :

	
	for i in range(a, b)):
		instruction1
		instruction2
	suite programme
	
	

Nous avons ici une boucle où la variable i prendra toutes les valeurs entières comprises entre a et b (a inclus et b exclu).

Pour faire les exercices ci-dessous,
Vous allez ouvrir un notebook Jutyter (Python) en cliquants sur le lien ci-contre :
NoteBook

Simples boucles

01°

  1. Copier/coller le code ci-dessous, puis le tester
  2. for i in range(0, 32):
        print(0, i)
  3. Modifier ce code pour obtenir les résultats suivants  (Ne pas faire les questions c), d) et e)):

02° Un exemple avec des images

  1. Copier/coller et tester le code ci-dessous :
  2. import matplotlib.pyplot as plt
    from PIL import Image

    #Creation d'une image blanche RGB 32x32
    Figure1 = Image.new("RGB",(32,32),(255,255,255))

    # definition d'une couleur
    rouge = (255, 0, 0)

    #remplissage de l'image avec une boucle:
    for i in range(0,32):
        Figure1.putpixel((0, i), rouge)

    #Affichage de l'image
    plt.imshow(Figure1)
    plt.show()

  3. Créer les images suivantes en 32 par 32 :
  4. Simples Boucles images

Doubles boucles

On va utiliser deux boucles FOR imbriquées.

03° Exemples - Dessiner des rectangles

  1. Copier/coller et tester le code ci-dessous :

    import matplotlib.pyplot as plt
    from PIL import Image

    #Creation d'une image blanche RGB 30x20
    Figure1 = Image.new("RGB",(30,20),(255,255,255))

    # definition des couleurs:
    bleu = (0, 0, 255)
    jaune = (255, 255, 0)

    #remplissage de l'image avec une double boucle:
    for x in range(0,10):
        for y in range(0,20):
            Figure1.putpixel((x, y), bleu)

    #remplissage de l'image avec une double boucle:
    for x in range(10,30):
        for y in range(12,20):
            Figure1.putpixel((x, y), jaune)

    #Affichage de l'image
    plt.imshow(Figure1)
    plt.show()

  2. À la ligne 20, après :
        Figure1.putpixel((x, y), jaune)

    Lara rajoute dans ce programme une autre double boucle :

    #remplissage de l'image avec une double boucle:
    for x in range(10,30):
        for y in range(3,10):
            Figure1.putpixel((x, y),(255,0,0))

    Exécuter le programme ainsi modifié

04° Le drapeau Français

Drapeau France
90 par 60 pixels

   Copier/coller et compléter le code suivant pour obtenir le drapeau de la France :

import matplotlib.pyplot as plt
from PIL import Image

#Creation d'une image blanche RGB 90x60
Figure1 = Image.new("RGB",(30,20),(255,255,255))

# definition des couleurs:
bleu = (0, 0, 255)
rouge = (255, 0, 0)

#remplissage de l'image avec une double boucle:
for x in range(0,10):
    for y in range(0,20):
        Figure1.putpixel((x, y), bleu)

#remplissage de l'image avec une double boucle:
for x in range(..., ...):
    for y in range(..., ...):
        Figure1.putpixel((x, y), rouge)

#Affichage de l'image
plt.imshow(Figure1)
plt.show()

05° Un autre drapeau

    Réaliser le drapeau de l'Allemagne
    Drapeau Allemagne
    90 par 60 pixels

2 - Première Etude

Pour les exercices qui suivent, vous devez utiliser le logiciel Spyder.

Nous allons maintenant manipuler des images et changer les valeurs RGB des différents pixels.

Dans un premier temps nous allons utiliser une simple photo de Yoda pour faire nos premiers essais, ensuite, vous pourrez travailler avec l'image de votre choix.
L'image de Yoda Yoda est téléchargeable ici.

Cette image devra se trouver dans le même dossier que vos programmes Python.

06°

  1. Lancer le logiciel "Spyder"
  2. Créer un nouveau fichier et copier/coller le code ci-dessous :
  3. from PIL import Image

    # Création de l'objet-image propre à Python
    MonImage = Image.open("tux_yoda.jpg")

    r, v, b = MonImage.getpixel((90, 150))

    print(MonImage.size)

    print("canal rouge : ", r, "canal vert : ", v, "canal bleu : ", b )

    MonImage.show()

  4. Exécuter ce code et observer l'image affichée.
  5. Lire l'analyse du programme ci-dessous
  6. A partir du programme précédent, éxécuter les taches suivantes :
    • a) Quelle est la taille de l’image chargée?
    • b) Quelle est la couleur du pixel de coordonnées (90 ; 150) ?.
    • c) Modifier l’image pour que le pixel de coordonnées (120;70) soit bleu. Pensez à utiliser la commande : MonImage.putpixel((...,...),(...,...,...))
    • d) Mettre un pixel de couleur rouge au bout de du sabre laser.

Voici une analyse ligne par ligne du programme ci-dessus :
  • "from PIL import Image" : pour travailler sur les images nous avons besoin d'une extension de Python (appelé bibliothèque). Cette bibliothèque se nomme PIL.
  • "MonImage = Image.open("tux_yoda.jpg")" c'est grâce à cette ligne que nous précisons que nous allons travailler avec l'image "tux_yoda.jpg".
    Pour travailler avec une autre image, il suffit de remplacer "tux_yoda.jpg" par un autre nom.
    (attention, votre fichier image devra se trouver dans le même dossier que le ficher de votre programme Python).
  • "r,v,b=MonImage.getpixel((90,150))" cette ligne récupère les valeurs du canal rouge (r), du canal vert (v) et du canal bleu (b) du pixel de coordonnées (90,150).
    Dans la suite du programme, r correspondra à la valeur du canal rouge, v correspondra à la valeur du canal vert et b correspondra à la valeur du canal bleu.
  • "print(MonImage.size)" permet d'imprimer les dimension de l'image.
    Ces dimensions sont obtenues par la commande "MonImage.size"
  • "print("canal rouge : ",r,"canal vert : ",v,"canal bleu : ",b)" permet d'imprimer le résultat

Comme vous pouvez le voir, il est assez facile de modifier les couleurs d'une image ou d'en tirer des informations supplémentaires.

Dans la prochaine activités, nous verrons même qu'il est parfois possible d'y laisser votre nom ou vos coordonnées GPS. C'est dire ...

Activité publiée le 25 11 2020
Dernière modification : 18 3 2024
Auteur : Andjekel.