簡単な問題がありますが、良い解決策が見つかりません。
グレースケール画像を表す 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
かなり忙しい一行ですが、ここにあります:
- まず、NumPy 配列 が
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()
: