Modifier la Bitmap d'une image avec Python 3
Une image matricielle, ou « carte de points » (de l'anglais bitmap), est une image constituée d'une matrice de points colorés. Cela signifie qu'elle est constituée d'un tableau, d'une grille, où chaque case possède une couleur qui lui est propre et est considérée comme un point. (Wikipédia). Saviez-vous qu'il était possible de modifier cette bitmap très facilement en Python ? :)
Télécharger une image
Je vous propose de modifier cette image image.
Chat Surpris
Il n’est pas nécessaire de la télécharger, je vais vous montrer comment le faire avec Python directement.
Tout d’abord, ouvrez un nouveau fichier python dans votre IDE préféré. Jupyter Notebook est probablement la meilleure alternative :).
Entrez ce code.
from PIL import Image
import requests
from io import BytesIO
Url = 'https://mowse.dev/fr/modifier-la-bitmap-dune-image-avec-python-et-numpy/pexels-photo-2194261-1384x752.jpeg'
response = requests.get(Url)
ImgDL = Image.open(BytesIO(response.content))
ImgDL.save("chat.jpeg")
Dans vos fichiers, vous pouvez maintenant trouver “chat.jpeg”.
Je vous propose de faire une copie de ImgDL pour pouvoir réutiliser ImgDL plus tard si besoin.
import numpy as np
newImg = np.copy(ImgDL)
Afficher les valeurs de la Bitmap
Pour afficher le tableau associé à l’image, rien de compliqué :
newImg
On peut remarquer que newImg contient un array (l’image) d’array (de lignes) d’array (pixel). Chaque pixel étant un triplet, Rouge, Vert, Bleu. Les lignes sont représentées de haut en bas.
Modifier la Bitmap
Créer une ligne noire
Il suffit de rendre tous les pixels de la première ligne égaux à [0,0,0].
Pour cela, rien de très compliqué :
Code :
newImg[0, 0:] = [0, 0, 0]
imgF = Image.fromarray(newImg, 'RGB')
imgF.save('LigneNoire.png')
newImg
Comparaison :
Chat Surpris
Chat Surpris avec la première ligne en noir
A peine visible, il y a bien une première ligne noir sur la photo de droite :).
Rendre l’image rouge
Pour rendre une image “rouge”, il faut que la première valeur de chaque pixel soit égale à sa valeur maximal. Autrement dit, il faut que le rouge soit égal à 255 pour chaque pixel.
Code :
newImg[0, 0:] = [0,0,0]
imgF = Image.fromarray(newImg, 'RGB')
imgF.save('Rouge.png')
imgF
Comparaison :
Chat Surpris
Chat Surpris Rouge
Faire un négatif de l’image
Pour obtenir le négatif d’une image, il faut que chaque valeur soit remplacée par 255 moins sa valeur. Par exemple si pour le vert du pixel, sa valeur est 250, son négatif sera 255-250 = 5. Ainsi, il faut faire :
Code :
newImg[0:, 0:, 0:] = 255 - newImg[0:, 0:, 0:]
imgF = Image.fromarray(newImg, 'RGB')
imgF.save('negatif.png')
imgF
Comparaison :
Image Originale
Image Négative
Le fichier sur GitHub :
https://gist.github.com/RobinPourtaud/5036f9a5dfcff7fa43be1ec6ccae1484