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()
するとこんな感じで表示されます.
なんだか色が付いちゃってます.
matplotlibはデフォルトでカラーマップが設定されているのでこんな感じになってしまうんですね.
これを解除するためにはplt.gray()
を入れてあげるだけです.
plt.gray() # カラーマップを"gray"に設定
plt.imshow(im)
plt.show()
ちゃんと期待通りになりました.
実はここまではいろんなところに情報があるんですけど,私はこう思ってしまったことがあるんです.
でもなんかいい感じだったから元のカラーマップに戻したいな?
案外見つからなくて,「もとに戻したいと思ってる人いないのかな…」って思ってました.
デフォルトのカラーマップが何なのかわからなかったので,元に戻すのを諦めてましたが,公式にちゃんと書いてありました.
このviridisがデフォルトのカラーマップのようです.
早速設定してみましょう.
plt.viridis()
plt.imshow(im)
plt.show()
2.あれ?コントラストがおかしいな?
これに気づけたのは奇跡だと思っているんですが,なんかちょっと色がおかしいなって思ったんです.
なので,テストでこんな画像を読み込ませてみました.
まっくろです.…が,matplotlibで表示させると
どうやら色の階調が正規化されているみたいです.これを解消するためには下記のようにvminとvmaxを指定してあげないといけないようです.
plt.imshow(im, vmin = 0, vmax = 255)
きっと他にも私が気づいていないデフォルト設定があるんでしょうね.
以上です.間違いなどありましたら教えて下さい.