Bonjour,
C'est normal que tu obtienne une image rouge. Tu crée une image 'imagenew' et 'imagefinal' en 'RGB' et non en niveau de gris ('L'). Du coup lorsque tu fais 'im.pupixel((x,y),50)', 50 est associé au R de ce pixel.
Tu devrais simplement créer une image en niveau de gris:
new=Image.new('L',(Thori,Tvert))
Il existe déjà une méthode pour convertir une image 'RGB' en niveau de gris:
1 2 3 4
| from PIL import Image
im=Image.open('tonImage.jpg')
im.convert('L')
im.show() |
Sinon tu t’embête pas mal dans ton code:
1 2 3 4 5 6
| for x in range(0,Tvert):
for y in range(0,Thori):
r1,g1,v1 = image.getpixel((x,y))
r.append(r1)
g.append(g1)
v.append(v1) |
peut être remplacé par:
Enfin j'aurai tendance à plutôt utiliser les listes que les coordonnées matriciels des pixels:
te renvoi la liste des pixels. Tu perd les coordonnées mais tu peux les retrouver facilement, le pixel de coordonnée (x,y) se trouve alors dans data[x+y*im.size[0]].
Ça te permet de raccourcir un peu cette partie:
1 2 3 4
| for x in range(0,Tvert):
for y in range(0,Thori):
l1=int((r[y*Thori+x]+g[y*Thori+x]+v[y*Thori+x])/3)
imageNew.putpixel((x,y),l1) |
en:
1 2 3
| data = image.getdata()
data = [int((r[x]+g[x]+v[x])/3) for x in range(len(data))]
image.putdata(data) |
ou simplement:
1 2 3
| data = image.getdata()
data = [int(sum(data[x])/3) for x in range(len(data))]
image.putdata(data) |
Sinon je ne comprend pas trop à quoi sert ta dernière boucle =)
Partager