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

juin 2018
lunmarmerjeuvensamdim
28293031123
45678910
11121314151617
18192021222324
2526272829301
Évènements à venir
Pas d'évènements à venir

Articles les plus vus

Statistiques du site

  • Nombre total de visites :
    195147 visiteurs
  • Aujourd'hui :
    Vous êtes le premier !
  • Nombre de pages visitées :
    268990 pages
  • Actuellement en ligne :
    68 visiteurs
  • Ce site contient :
    194 articles
  • Dernier article paru :
    "Module Numpy"
    le 7 mai 2018
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]