web-dev-qa-db-fra.com

Conversion d'une image RVB en niveaux de gris et manipulation des données de pixels en python

J'ai une image RVB que je veux convertir en image en niveaux de gris, de sorte que je puisse avoir un nombre (peut-être entre 0 et 1) pour chaque pixel. Cela me donne une matrice qui a des dimensions égales à celles des pixels de l'image. Ensuite, je veux faire quelques manipulations sur cette matrice et générer une nouvelle image en niveaux de gris à partir de cette matrice manipulée. Comment puis-je faire ceci?

11
lovespeed

Je travaille fréquemment avec des images en tant que tableaux NumPy - je le fais comme ceci:

import numpy as np
from PIL import Image

x=Image.open('im1.jpg','r')
x=x.convert('L') #makes it greyscale
y=np.asarray(x.getdata(),dtype=np.float64).reshape((x.size[1],x.size[0]))

<manipulate matrix y...>

y=np.asarray(y,dtype=np.uint8) #if values still in range 0-255! 
w=Image.fromarray(y,mode='L')
w.save('out.jpg')

Si les valeurs de votre tableau y ne sont plus dans la plage 0-255 après les manipulations, vous pouvez passer à des TIFF 16 bits ou simplement redimensionner.

-Aldo

16
Aldo