J'ai un problème simple, mais je ne trouve pas de bonne solution.
Je veux prendre un tableau NumPy 2D qui représente une image en niveaux de gris et le convertir en une image RGB PIL tout en appliquant certaines des cartes de couleurs matplotlib.
Je peux obtenir une sortie PNG raisonnable en utilisant la 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 un moyen plus simple de le faire, car cela semble être un problème très naturel de visualisation d'image. Disons quelque chose comme ça:
colored_PIL_image = magic_function(array, cmap)
python
numpy
matplotlib
python-imaging-library
color-mapping
heltonbiker
la source
la source
Réponses:
Un one-liner assez chargé, mais le voici:
myarray
est normalisé avec la valeur maximale à1.0
.myarray
.0-255
gamme.np.uint8()
.Image.fromarray()
.Et tu as fini:
avec
plt.savefig()
:avec
im.save()
:la source
myarray
» est coupée directement au cœur! Je ne savais pas que c'était possible, merci!im = Image.fromarray(cm.gist_earth(myarray, bytes=True))
NameError: name 'cm' is not defined
from matplotlib import cm
Image.fromarray -> renvoie un objet image
la source
La méthode décrite dans la réponse acceptée n'a pas fonctionné pour moi même après avoir appliqué les modifications mentionnées dans ses commentaires. Mais le code simple ci-dessous a fonctionné:
np_array pourrait être soit un tableau 2D avec des valeurs de 0..1 floats o2 0..255 uint8, et dans ce cas, il a besoin de cmap. Pour les tableaux 3D, cmap sera ignoré.
la source