Aller au contenu

Une pomme

Cette photographie est la photo d'une belle pomme rouge. Le problème est que je préfère les pommes vertes. Votre mission va donc être de remplacer cette pomme rouge par une verte.

Information sur la photo

En vous inspirant du code utilisé pour le panneau de feux tricolores:

  • obtenir le couple (nombre de lignes, nombre de colonnes) de la photo.
  • Les couleurs sont-elles encore codées par un triplet?
Réponse

Le code suivant:

from PIL import Image

# ouverture de l'image:
source = Image.open('pommeRouge.png')

# récupération de ses dimensions :
largeur, hauteur = source.size

print(f"Nombre de colonnes: {largeur}.")
print(f"Nombre de lignes: {hauteur}.")

# récupération de la couleur du pixel (320, 200):
c  = source.getpixel((320,200))
print(f"Code couleur du pixel (320,200): {c}.")

donne:

Nombre de colonnes: 640.
Nombre de lignes: 423.
Code couleur du pixel (320,200): (128, 1, 41, 255).

Le code couleur est maintenant un quadruplet. Les trois premières composantes sont les composantes RGB (red, green, blue). La dernière composante est une composante d'opacité.

Transformer la pomme

Le code suivant montre comment modifier la couleur de pixels et sauvegarder le résultat:

from PIL import Image

# ouverture de l'image.
# source est une variable   
# dans laquelle on stocke les données de l'image par
# l'affectation ci-dessous:
source = Image.open('pommeRouge.png')

# récupération de ses dimensions :
largeur, hauteur = source.size


# on modifie les données de certains pixels dans source:
for lig in range(240, 300):
    for col in range(330,390):
        # on donne la couleur (255,255,255), opacité 255
        # au pixel (col, lig):
        source.putpixel((col, lig), (255,255,255,255))

# on sauvegarde sur un autre fichier:
source.save("degradation.png")
# on montre le résultat:
source.show()

Tester ce code. Puis s'en inspirer pour créer une image pommeVerte.png qui aura transformé ma pomme rouge en pomme verte.

Indication

L'idée est d'échanger les intensités de vert et de rouge: là où le rouge l'emportait, le vert l'emportera.

Un quadruplet (rouge, vert, bleu, alpha) de l'image initiale deviendra donc (vert, rouge, bleu, alpha) dans l'image finale. Par exemple un pixel de couleur (255, 0, 0, alpha) prendra la couleur (0, 255, 0, alpha), passant ainsi du rouge au vert.

Un code
from PIL import Image

# ouverture de l'image:
source = Image.open('pommeRouge.png')

# récupération de ses dimensions :
largeur, hauteur = source.size

for ligne in range(hauteur):
    for colonne in range(largeur):
        rouge, vert, bleu, alpha = source.getpixel((colonne, ligne))
        source.putpixel((colonne, ligne), (vert, rouge, bleu, alpha))

source.save('pommeVerte.png')
source.show()

Et voilà la belle pomme verte qui en résulte:

Pomme bleue

Vous pouvez maintenant tenter une pomme bleue facilement.

Pour pouvez aussi tenter d'autres couleurs. Par exemple, remplacer un quadruplet (rouge, vert, bleu, alpha) par ((rouge+vert+bleu)//2, (rouge+vert+bleu)//2, 0, alpha)...