私は単純な問題を抱えていますが、それに対する良い解決策を見つけることができません。
グレースケールイメージを表すnumpy 2D配列を取得し、matplotlibカラーマップの一部を適用しながらそれをRGB PILイメージに変換します。
pyplot.figure.figimage
コマンドを使用して、適切なPNG出力を取得できます。
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')
私はこれを私が望むものを得るために適応させることができますが(おそらくStringIOを使用してPIL画像を取得します)、画像の視覚化の非常に自然な問題のように見えるので、それを行う簡単な方法はないのでしょうか?このようなことを言ってみましょう:
colored_PIL_image = magic_function(array, cmap)
読んでくれてありがとう!
非常に忙しい1つのライナーですが、ここにあります:
myarray
が1.0
の最大値で正規化されていることを確認します。myarray
に直接適用します。0-255
範囲に再スケーリングします。np.uint8()
を使用して、整数に変換します。Image.fromarray()
を使用します。これで完了です。
from PIL import Image
from matplotlib import cm
im = Image.fromarray(np.uint8(cm.Gist_earth(myarray)*255))
plt.savefig()
で:
im.save()
で:
承認済みの回答に記載されている方法は、コメントに記載されている変更を適用した後でも機能しませんでした。しかし、以下の簡単なコードが機能しました
import matplotlib.pyplot as plt
plt.imsave(filename, np_array, cmap='Greys')
np_arrayは、0..1 floats o2 0..255 uint8の値を持つ2D配列のいずれかで、その場合はcmapが必要です。 3D配列の場合、cmapは無視されます。