Module Numpy
Article mis en ligne le 7 mai 2018 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 ?
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] = [255, 0, 0]
image2 = Image.fromarray(pixels)
image2.save('obama2.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 :

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éé ?

Dans la même rubrique :

Module Turtle
le 8 janvier 2018
par C GIBERT

Identification

Calendrier

mai 2019
lunmarmerjeuvensamdim
293012345
6789101112
13141516171819
20212223242526
272829303112
Évènements à venir
Pas d'évènements à venir

Articles les plus vus

Statistiques du site

  • Nombre total de visites :
    216026 visiteurs
  • Aujourd'hui :
    8 visiteurs
  • Nombre de pages visitées :
    299745 pages
  • Actuellement en ligne :
    0 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]