TP : Python et les images
Article mis en ligne le 19 octobre 2016 par C GIBERT
Imprimer cet article logo imprimer

Préalable : cours sur le codage d’une image. Nous allons ici travailler sur des images BMP, en RGB. Donc chaque pixel sera codé par une liste de 3 nombres entre 0 et 255 correspondant à la quantité de chaque couleur primaire, dans l’ordre : Rouge ;Vert;Bleu (en anglais RGB).

Dans cette activité vous allez apprendre à manipuler une image à l’aide de la bibliothèque Numpy de Python.

  • Récupérer ce portrait sur votre espace perso
  • Que fait le programme ci-dessous (le créer et l’enregistrer au même endroit que l’image) ?
from PIL import Image        # Pour lire et écrire des images dans un fichier
import numpy as np  # Pour manipuler des tableaux de nombres

image = Image.open('obama.jpg')
pixels = np.array(image)
for y in range(110, 140):
   for x in range(50, 200):
       pixels[y, x] = np.array([255, 0, 0])
image2 = Image.fromarray(pixels)
image2.save('portrait2.jpeg')

Exercice 1 :

  • Créez ce programme, exécutez-le et observez son effet.
  • Modifiez le programme afin de remplacer la zone rouge par du vert.
  • Modifiez le programme afin d’insérer des petits carrés oranges au niveaux des yeux.
  • Modifiez le programme afin d’ajouter une grande croix rouge en forme de X dont les extrémités sont localisées aux quatre coins de l’image.

La bibliothèque Numpy dispose d’une syntaxe qui permet d’éviter parfois l’écriture de boucles imbriquées. Ainsi, le programme ci-dessus peut aussi s’écrire sous cette forme :

from PIL import Image         # Pour lire et écrire des images dans un fichier
import numpy as np  # Pour manipuler des tableaux de nombres

image = Image.open('portrait.jpeg')
pixels = np.array(image)
pixels[176:190, 80:134] = np.array([255, 0, 0])
image2 = Image.fromarray(pixels)
image2.save('portrait2.jpeg')

Voici quelques exemples d’utilisation :

pixels[5, 7, 0] = 255   # Canal 0 du pixel (7, 5) mis à 255
pixels[5, 7, 1:3] = 128 # Canaux 1 à 2 du pixel (7, 5) mis à 128
pixels[9, :, 1] = 100 # Canal 1 des pixels de la ligne 9 mis à 100
np.mean(pixels[6, 4]) # Renvoie la moyenne des 3 canaux du pixel (4, 6)
np.mean(pixels[:, 7, 1]) # Renvoie la moyenne du canal 1 de la colonne 7
# La ligne suivante crée un tableau 256x256x3 contenant des 0
pixels2 = np.zeros((256, 256, 3), dtype=np.uint8)
# La ligne suivante crée une copie du tableau `pixels`
pixels2 = np.copy(pixels)

Exercice 2 : Augmenter la valeur de chaque canal de 50, en prenant garde de ne pas dépasser 255. Quel est l’effet créé ? Même question en soustrayant 50.

Exercice 3 : Augmenter chaque canal de 30%. Quel est l’effet créé ? Même question en baissant de 30%.

Exercice 4 : Affecter à chaque canal, la moyenne des 3 canaux. Quel est l’effet créé ?

Exercice 5 : Affecter à chaque pixel la moyenne des 9 pixels "autour" (Chaque pixel est le centre d’un carré de côté 3 pixels). Quel est l’effet créé ? Variabiliser le programme pour qu’il vous demande la taille n du carré.

Exercice 6 : Affecter à chaque pixel I la quantité |I1-I2|+|I3-I4|+|I5-I6|+|I7-I8| avec

I5 I3 I8
I1 I I2
I7 I4 I6

Quel est l’effet créé ?

Exercice 8 : 1. Nous souhaitons faire subir à notre photo une transformation "photomaton". Ainsi l’image ci dessus est transformée en :

JPEG - 13 ko

Comment faire une telle transformation ? Ecrire un programme le faisant.

2. Modifier votre programme pour itérer ce procédé 10 fois. Observer l’évolution des images. Qu’observez-vous, et comment l’expliquez-vous ?

Exercice 9 : Nous souhaitons maintenant faire subir à notre image une transformation "à la Andy Wharhol". C’est à dire obtenir une image du type :

JPEG - 13.9 ko

Ecrire le programme correspondant.

Téléchargements Fichier à télécharger :
  • IMG/jpg/obama.jpg
  • Taille du fichier : 9.4 ko
  • Format : JPEG

Dans la même rubrique :

Interrogation
le 16 octobre 2018
par C GIBERT
TP : les tris
le 11 janvier 2017
par C GIBERT
TP : récursivité
le 30 novembre 2016
par C GIBERT
TP : Python et les textes
le 5 octobre 2016
par C GIBERT

Identification

Calendrier

mars 2019
lunmarmerjeuvensamdim
25262728123
45678910
11121314151617
18192021222324
25262728293031
Évènements à venir
Pas d'évènements à venir

Articles les plus vus

Statistiques du site

  • Nombre total de visites :
    211051 visiteurs
  • Aujourd'hui :
    Vous êtes le premier !
  • Nombre de pages visitées :
    293363 pages
  • Actuellement en ligne :
    200 visiteurs
  • Ce site contient :
    200 articles
  • Dernier article paru :
    "Journée portes ouvertes"
    le 16 mars 2019
puce Contact puce Espace rédacteurs puce squelette puce RSS puce Valid XHTML 1.0 Strict
Site réalisé sous SPIP
avec le squelette ESCAL-V2
Version : 2.6.7 [61555]