LoginSignup
1
2

画像にカラーマップを重ねて表示する

Last updated at Posted at 2024-03-03

目的

GradCAMの出力みたいな画像が作りたい、と思い調べてみたメモ。

サンプルコード環境

バージョン
python 3.10.9
cv2 4.6.0

手順

  1. ベース画像の読み込み
  2. 同サイズの出力をヒートマップ(カラーマップ)化
  3. アルファブレンディングでオーバーレイする

サンプルコード

0. 使用ライブラリ

import cv2 
import numpy as np # サンプルマップ生成用
import matplotlib.pyplot as plt # 画像表示確認用
import skimage.data import cat # サンプル画像用

1. 画像読み込み

scikit-imageのサンプルデータで。

# img = cv2.imread("path/to/img")
img = cat()
height, width, _channel = img.shape
plt.imshow(img)
plt.show()

image.png

2. カラーマップ生成

ここが本来処理・解析結果の部分になる。
基本的にuint8のndarrayとなるように作成し、cv2.applyColorMapに渡せばよい。

# 適当な格子列生成
x = np.arange(width)
y = np.arange(height)
X, Y = np.meshgrid(x, y)
Z = X + Y

# Zを0-255にスケーリング
Z_uint8 = np.array((Z - Z.min()) / (Z.max() - Z.min()) * 255, dtype=np.uint8)

# カラーマップ化
colormap = cv2.applyColorMap(Z_uint8, cv2.COLORMAP_JET)

plt.imshow(colormap)
plt.show()

image.png

3. アルファブレンディング

アルファブレンディング(=透過処理して画像をオーバーレイ)を適用。cv2.addWeightedを使えばOK

alpha = 0.5 # 割合は0-1で調整。

blend = cv2.addWeighted(img, alpha, colormap, 1-alpha, 0)
plt.imshow(blend)
plt.show()

image.png

ひとまずこれで満足。

1
2
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
1
2