実現したいこと
- matplotlibでグレースケール画像を適切に表示させたい
前提
jupyter notebookを使用しています。白黒のマスク画像はpillowで読み込んでます。
マスク画像は、もとの画像から物体のある部分を白に二値化したものです。
もとの画像には対象物が写っていない画像、拡大率が高く画面いっぱいに対象物が写っている画像があり、これらを二値化すると、それぞれ0のみで構成される画像、255のみで構成される画像に変換されています。
以下にnp.array(mask)変換した例を示します。
- 具体例
- 白黒
[[ 0 0 0 ... 0 0 0]
...
[ 0 0 0 ... 255 255 255]] - 白のみ
[[ 255 255 255 ... 255 255 255]
...
[ 255 255 255 ... 255 255 255]] - 黒のみ
[[ 0 0 0 ... 0 0 0]
...
[ 0 0 0 ... 0 0 0]]
- 白黒
発生している問題・エラーメッセージ
白黒の画像はplt.imshow(mask, cmap="gray")で表示できるのですが、白のみ、黒のみの画像はなぜか白黒が反転して表示されてしまいます。
該当のソースコード
python
1from PIL import Image 2import matplotlib.pyplot as plt 3 4mask_path = "path/mask.png" 5mask = Image.open(mask_path) 6plt.imshow(mask) 7plt.show()
試したこと
以下をjupyter notebookで実行したときには適切に表示されました。
python
1from PIL import Image 2 3mask_path = "path/mask.png" 4mask = Image.open(mask_path) 5mask
また、cmap = "gray_r"にすると、白のみ、黒のみの画像は正常に表示されるようになりましたが、白黒の画像が反転してしまいました。
補足情報(FW/ツールのバージョンなど)
実用上ifで場合分けしてもいいかもしれませんが、とても気持ち悪いです。
この現象がどうして生じるのか、原因が知りたいです。
PIL.version = '9.4.0'
matplotlib.version = '3.7.1'

回答1件
あなたの回答
tips
プレビュー