Article épinglé

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 ;)