2.5 Affichage, manipulation et sauvegarde d'images

Outre les représentations graphiques de fonctions et de données, Matplotlib permet de manipuler très facilement des images. Ainsi, le code suivant permet par exemple d'afficher (et éventuellement de manipuler) l'image du trou noir déjà évoquée en introduction. Ici, l'image blackhole.jpg chargée ne contient pas de canal lié à la transparence et est de la forme (932, 1600, 3).

import numpy as np import matplotlib.pyplot as plt # lecture et conversion de l'image import matplotlib.image as mpimg bhM87 = mpimg.imread("blackhole.jpg") # forme : (932, 1600, 3) # affichage de l'image plt.imshow(bhM87) plt.show() # traitement de l'image bhM87[100:400,100:200,:] = [0,0,255] # sauvegarde de l'image mpimg.imsave("blackhole_modifie.png", bhM87)

Affichage de l'image originale Black Hole M87 (Event Horizon Telescope Collaboration) :

Plus précisément, \(\ldots\)

Image manipulée (ajout d'un rectangle bleu) :

Le fait de travailler avec des tableaux numpy permet de modifier (traiter) très facilement les images. Ainsi, il est par exemple facile de retourner horizontalement l'image obtenue ci-dessus en rajoutant une ligne de code qui inverse les colonnes du tableau :

bhM87 = bhM87[:,::-1,:]

Il est également très facile d'augmenter la luminosité du canal rouge en complétant le code avec les deux lignes suivantes (la seconde ligne permet de s'assurer qu'aucune valeur dans la troisième dimension du tableau ne dépasse \(255\)) :

bhM87_brighter_red = bhM87 + [100,0,0] bhM87_brighter_red[bhM87_brighter_red > 255] = 255