Tengo un problema simple, pero no puedo encontrar una buena solución.
Quiero tomar una matriz NumPy 2D que represente una imagen en escala de grises y convertirla en una imagen RGB PIL mientras se aplican algunos de los mapas de color matplotlib.
Puedo obtener una salida PNG razonable usando el pyplot.figure.figimage
comando:
dpi = 100.0
w, h = myarray.shape[1]/dpi, myarray.shape[0]/dpi
fig = plt.figure(figsize=(w,h), dpi=dpi)
fig.figimage(sub, cmap=cm.gist_earth)
plt.savefig('out.png')
Aunque podría adaptar esto para obtener lo que quiero (probablemente usando StringIO obtengo la imagen PIL), me pregunto si no hay una forma más sencilla de hacerlo, ya que parece ser un problema muy natural de visualización de imágenes. Digamos algo como esto:
colored_PIL_image = magic_function(array, cmap)
python
numpy
matplotlib
python-imaging-library
color-mapping
heltonbiker
fuente
fuente
Respuestas:
Una línea muy ocupada, pero aquí está:
myarray
esté normalizada con el valor máximo en1.0
.myarray
.0-255
gama.np.uint8()
.Image.fromarray()
.Y tu estas listo:
con
plt.savefig()
:con
im.save()
:fuente
myarray
" corta directamente al corazón! No sabía que era posible, ¡gracias!im = Image.fromarray(cm.gist_earth(myarray, bytes=True))
NameError: name 'cm' is not defined
from matplotlib import cm
Image.fromarray -> devuelve un objeto de imagen
fuente
El método descrito en la respuesta aceptada no funcionó para mí, incluso después de aplicar los cambios mencionados en sus comentarios. Pero el siguiente código simple funcionó:
np_array podría ser una matriz 2D con valores de 0..1 flotantes o2 0..255 uint8, y en ese caso necesita cmap. Para las matrices 3D, se ignorará cmap.
fuente