Télécharger une image
Je vous propose de modifier cette image image.

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 :


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 :


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 :


Le fichier sur GitHub :
https://gist.github.com/RobinPourtaud/5036f9a5dfcff7fa43be1ec6ccae1484