220

私は単純な問題を抱えていますが、それに対する良い解決策を見つけることができません。

グレースケール画像を表すNumPy2D配列を取得し、matplotlibカラーマップの一部を適用しながらRGBPIL画像に変換したいと思います。

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

3 に答える 3

319

非常に忙しいワンライナーですが、ここにあります:

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

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

于 2012-06-10T08:55:47.260 に答える