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

juillet 2019
lunmarmerjeuvensamdim
1234567
891011121314
15161718192021
22232425262728
2930311234
Évènements à venir
Pas d'évènements à venir

Articles les plus vus

Statistiques du site

  • Nombre total de visites :
    218712 visiteurs
  • Aujourd'hui :
    7 visiteurs
  • Nombre de pages visitées :
    303317 pages
  • Actuellement en ligne :
    1 visiteur
  • Ce site contient :
    211 articles
  • Dernier article paru :
    "Commande groupée de calculatrice, rentrée 2019"
    le 23 mai 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]