J'ai un problème simple mais je ne peux pas trouver une bonne solution.
Je veux prendre un tableau 2D numpy qui représente une image en niveaux de gris et le convertir en image RVB PIL tout en appliquant certaines des nuances de couleurs de matplotlib.
Je peux obtenir une sortie PNG raisonnable en utilisant le pyplot.figure.figimage
commande:
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')
Bien que je puisse adapter cela pour obtenir ce que je veux (probablement en utilisant StringIO pour obtenir l'image PIL), je me demande s'il n'y a pas de moyen plus simple de le faire, car cela semble être un problème très naturel de visualisation d'images. Disons quelque chose comme ça:
colored_PIL_image = magic_function(array, cmap)
Merci d'avoir lu!
Un paquebot très occupé, mais le voici:
myarray
, est normalisé avec la valeur maximale de 1.0
.myarray
.0-255
.np.uint8()
.Image.fromarray()
.Et tu as fini:
from PIL import Image
from matplotlib import cm
im = Image.fromarray(np.uint8(cm.Gist_earth(myarray)*255))
avec plt.savefig()
:
avec im.save()
:
La méthode décrite dans la réponse acceptée ne fonctionnait pas pour moi, même après avoir appliqué les modifications mentionnées dans ses commentaires. Mais ci-dessous le code simple a fonctionné
import matplotlib.pyplot as plt
plt.imsave(filename, np_array, cmap='Greys')
np_array peut être soit un tableau 2D avec des valeurs de 0..1 floats o2 0..255 uint8 et dans ce cas, il faut cmap. Pour les matrices 3D, cmap sera ignoré.