Article épinglé

Domaine ipa-troulet.fr, ce n'est plus moi...

Mise en garde - Domaine ipa-troulet.fr Ce domaine fut le mien de 2012 à 2025, il était hébergé au Canada chez HostPapa. Mais faute de motiva...

mardi 11 février 2020

Python, image et pixels avec Pillow


Création d'une image avec des couleurs aléatoires puis modification de cette dernière.

Bibliothèque à installer sous l'IDE Thonny

Voir Pillow qui remplace PIL sous python 3


Création d'une image de 5x5 pix² puis inversion des couleurs puis mise en niveau de gris

Script

from PIL import Image
from random import *

#taille image
largeur =5
hauteur=5

# creation image 5 pix² couleur aleatoire
img=Image.new("RGB",(largeur,hauteur),(255,255,255))

print("test 1 creation de l'image source - enregistrement 5par5pix-1.jpg")

for x in range (largeur):
    for y in range (hauteur):
        b=randint(0,255)
        v=randint(0,255)
        r=randint(0,255)

        img.putpixel((x,y),(r,v,b))
        print(x,y,r,v,b)
img.save("5par5pix-1.jpg")

# inversion couleur
print("test 2 Inversion couleur - enregistrement 5par5pix-2.jpg")

img=Image.open("5par5pix-1.jpg")
for x in range (largeur):
    for y in range (hauteur):
        r,v,b=img.getpixel((x,y))
        nr,nv,nb=255-r,255-v,255-b
        img.putpixel((x,y),(nr,nv,nb))
        print(x,y,nr,nv,nb)
img.save("5par5pix-2.jpg")        

# mise en niveau de gris
print("test 3 niveau de gris - enregistrement 5par5pix-3.jpg")

img=Image.open("5par5pix-1.jpg")
for x in range (largeur):
    for y in range (hauteur):
        r,v,b=img.getpixel((x,y))
        gris=int((r+v+b)/3)
        img.putpixel((x,y),(gris,gris,gris))
        print(x,y,gris,gris,gris)
img.save("5par5pix-3.jpg") 

Shell

>>> %Run retouche.py
test 1 creation de l'image source - enregistrement 5par5pix-1.jpg
0 0 11 108 154
0 1 81 194 146
0 2 190 138 80
0 3 255 90 192
0 4 233 230 66
1 0 175 48 188
1 1 185 217 1
1 2 244 24 149
1 3 239 170 92
1 4 106 215 27
2 0 193 146 231
2 1 26 194 115
2 2 51 149 144
2 3 99 146 181
2 4 221 36 98
3 0 79 194 240
3 1 195 63 243
3 2 125 231 50
3 3 44 57 47
3 4 67 171 88
4 0 160 68 41
4 1 88 237 181
4 2 8 226 31
4 3 97 185 36
4 4 215 65 250
test 2 Inversion couleur - enregistrement 5par5pix-2.jpg
0 0 182 173 144
0 1 75 98 72
0 2 49 136 119
0 3 43 116 149
0 4 48 31 161
1 0 171 153 129
1 1 71 78 60
1 2 134 191 185
1 3 27 77 112
1 4 87 76 181
2 0 111 78 63
2 1 114 90 86
2 2 147 144 161
2 3 109 114 152
2 4 155 160 216
3 0 122 81 79
3 1 184 138 151
3 2 101 43 91
3 3 215 182 227
3 4 107 132 139
4 0 176 135 149
4 1 115 51 88
4 2 175 65 152
4 3 164 93 153
4 4 96 149 107
test 3 niveau de gris - enregistrement 5par5pix-3.jpg
0 0 88 88 88
0 1 173 173 173
0 2 153 153 153
0 3 152 152 152
0 4 175 175 175
1 0 104 104 104
1 1 185 185 185
1 2 85 85 85
1 3 183 183 183
1 4 140 140 140
2 0 171 171 171
2 1 158 158 158
2 2 104 104 104
2 3 130 130 130
2 4 78 78 78
3 0 161 161 161
3 1 97 97 97
3 2 176 176 176
3 3 47 47 47
3 4 129 129 129
4 0 101 101 101
4 1 170 170 170
4 2 124 124 124
4 3 118 118 118
4 4 137 137 137

Analyse

Création de l'image

  • Appel des bibliothèques nécessaires
  • Définition de la taille
  • Création de l'image codée en Rouge, Vert, Bleu sur 3 octets (255)
  • Affectation d'une valeur aléatoire de 0 à 255 pour r,v,b
  • Création des pixels x,y 
  • Impression à l'écran
test 1 creation de l'image source - enregistrement 5par5pix-1.jpg
pixel 0 0 r =11 v =108 b =154
pixel 0 1 r =81 v =194 b =146

Inversion des couleurs

Le principe est de prendre chaque valeur de r,v,b et de faire les modifs suivantes:
nr,nv,nb=255-r,255-v,255-b

Niveau de gris

La mise en niveau de gris consiste à faire la moyenne de r,v et b et d'affecter le résultat aux trois paramètres
gris=int((r+v+b)/3)
img.putpixel((x,y),(gris,gris,gris))


Aucun commentaire:

Enregistrer un commentaire

Tout commentaire nous engage ;)