hack のためのネタ帳, etc,,,

概要

Python でにグレースケールの PNG を読ませて疑似カラー表示(colormap とか heatmap とか)をさせたい。

方法

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" 以外にも多数のカラーマップが用意されているので、プリセットで利用可能な物については以下を参照
ファイルに保存したい場合は、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 については以下を参照。 なお 13 の MAGMA から 19 の TWIGHLIGHT_SHIFTED までは 3.4.6 で追加されたので、3.4.5 以前のバージョンでは利用できない。

参考:

関連

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます