1. ホーム
  2. パイソン

[解決済み] matplotlibのcolormapを適用してNumPyの配列をPIL画像に変換する方法

2022-04-08 03:21:21

質問

簡単な問題があるのですが、良い解決策が見当たりません。

私は、グレースケール画像を表すNumPyの2次元配列を受け取り、matplotlibのカラーマップのいくつかを適用しながらRGBのPIL画像に変換したいのです。

を使えば、妥当なPNG出力が得られますね。 pyplot.figure.figimage コマンドを使用します。

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')

しかし、これは画像の可視化というごく自然な問題であり、もっとシンプルな方法はないものだろうかと思います。例えば、このようなものです。

colored_PIL_image = magic_function(array, cmap)

解決方法は?

かなり忙しい一行ですが、どうぞ。

  1. まずNumPyの配列を確保します。 myarray にある最大値で正規化されています。 1.0 .
  2. に直接カラーマップを適用します。 myarray .
  3. にリスケールします。 0-255 の範囲になります。
  4. を使って、整数に変換する。 np.uint8() .
  5. 使用方法 Image.fromarray() .

で、終了です。

from PIL import Image
from matplotlib import cm
im = Image.fromarray(np.uint8(cm.gist_earth(myarray)*255))

plt.savefig() :

im.save() :