matplotlib カラーマップを適用して NumPy 配列を PIL 画像に変換する方法 質問する

matplotlib カラーマップを適用して NumPy 配列を PIL 画像に変換する方法 質問する

簡単な問題がありますが、良い解決策が見つかりません。

グレースケール画像を表す NumPy 2D 配列を取得し、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')

これを適応させて、必要な結果を得ることはできますが (おそらく StringIO を使用して PIL イメージを取得します)、これはイメージ視覚化の非常に自然な問題であるように思われるため、それを実現するより簡単な方法はないのか疑問に思います。たとえば、次のようになります。

colored_PIL_image = magic_function(array, cmap)

ベストアンサー1

かなり忙しい一行ですが、ここにあります:

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

ここに画像の説明を入力してください

おすすめ記事