LoginSignup
3
4

More than 3 years have passed since last update.

matplotlibで画像を表示する時に気になったこと

Last updated at Posted at 2020-03-31

matplotlibで画像を表示させた時にちょっと気になった点がいくつかあったので,それをまとめておきました.
きっと気になっている人もいると思うので(特に使い始めの方),ちょっとでも検索の手間が省けたら良いなぁと思ってます.
私はjupyter notebookをよく使うので,そこでの使用を前提としてます.

1.あれ?グレースケールのはずなのに色が付いてるな?

百聞は一見に如かず.とりあえず画像を表示させてみます.

# いつもの色々インポート
import cv2
import numpy as np
from matplotlib import pyplot as plt

im = np.array(cv2.imread('lena.png',0)) #画像を読み込んでnumpy形式にする

cv2.imread('lena.png',0) は"lena.png"を 0 すなわちグレースケールで読み込んでね,ということです.
ではmatplotlibで画像を表示させてみます.

# matplotlibで表示させます
plt.imshow(im)
plt.show()

するとこんな感じで表示されます.

スクリーンショット 2020-03-31 21.34.41.png

なんだか色が付いちゃってます.
matplotlibはデフォルトでカラーマップが設定されているのでこんな感じになってしまうんですね.
これを解除するためにはplt.gray()を入れてあげるだけです.

plt.gray() # カラーマップを"gray"に設定
plt.imshow(im)
plt.show()

スクリーンショット 2020-03-31 21.46.19.png
ちゃんと期待通りになりました.
実はここまではいろんなところに情報があるんですけど,私はこう思ってしまったことがあるんです.

でもなんかいい感じだったから元のカラーマップに戻したいな?


案外見つからなくて,「もとに戻したいと思ってる人いないのかな…」って思ってました.
デフォルトのカラーマップが何なのかわからなかったので,元に戻すのを諦めてましたが,公式にちゃんと書いてありました.

スクリーンショット 2020-03-31 21.54.38.png

このviridisがデフォルトのカラーマップのようです.
早速設定してみましょう.

plt.viridis()
plt.imshow(im)
plt.show()

スクリーンショット 2020-03-31 21.34.41.png
これで元に戻りました.めでたしめでたし.

2.あれ?コントラストがおかしいな?

これに気づけたのは奇跡だと思っているんですが,なんかちょっと色がおかしいなって思ったんです.
なので,テストでこんな画像を読み込ませてみました.
test.png
まっくろです.…が,matplotlibで表示させると
スクリーンショット 2020-03-31 22.20.06.png

どうやら色の階調が正規化されているみたいです.これを解消するためには下記のようにvminとvmaxを指定してあげないといけないようです.

plt.imshow(im, vmin = 0, vmax = 255) 

スクリーンショット 2020-03-31 22.27.35.png
目を凝らすとわずかに見えます.

きっと他にも私が気づいていないデフォルト設定があるんでしょうね.
以上です.間違いなどありましたら教えて下さい.

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4