[解決済み] 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)
解決方法は?
かなり忙しい一行ですが、どうぞ。
-
まず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()
:
関連
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
[解決済み] matplotlib のカラーマップを反転させる
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み] IPythonノートブックmatplotlibプロットをインラインで行う方法
-
[解決済み] PILを使用して画像のサイズを変更し、縦横比を維持するにはどうすればよいですか?
-
[解決済み】Matplotlibで図のタイトルと軸ラベルのフォントサイズを設定するには?
-
[解決済み】PILイメージをnumpyの配列に変換する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python カメの描画コマンドとその例
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】ValueError: xとyは同じサイズでなければならない