from matplotlib import pyplot as plt import cv2 img = cv2.imread("hoge.png") gray_scale_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) plt.imshow(gray_scale_img, cmap="inferno") plt.show()単純に cv2.imread() で PNG を読むと RGB の 3 チャンネルカラーを持った 3 次元の numpy.ndarray オブジェクトとなる。
このまま matplotlib.pyplot.imshow() に食わせると RGB 値そのままで描画されて cmap を与えても無視される。
このため、cv2.cvtColor() でグレースケール化する事により 2 次元の numpy.ndarray オブジェクトとして imshow() に食わせる事で、cmap による疑似カラー表示が可能となる。
ヒートマップ的配色の "inferno" 以外にも多数のカラーマップが用意されているので、プリセットで利用可能な物については以下を参照
- matplotlib / docs / Matplotlib Examples / color Examples / colormaps_reference
ファイルに保存したい場合は、cv2.applyColorMap() と cv2.imwrite() を用いて以下のようにする。
import cv2 img = cv2.imread("hoge.png") gray_scale_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) pseudo_color_img = cv2.applyColorMap(gray_scale_img, cv2.COLORMAP_HOT) cv2.imwrite("hoge_pc.png", pseudo_color_img)
OpenCV の COLORMAP については以下を参照。
- OpenCV / ColorMaps in OpenCV
参考:
- Qiita / termoshtt / 2016-06-30: matplotlibの2次元マップで色を指定する
- Qiita / Kazuhito / 2017-11-29: 【Python】OpenCVで疑似カラー(Pseudo color)
タグ
コメントをかく