グレースケール画像に疑似的な色を付けることを疑似カラーと言います。
以下のようなデータがあった場合に、視覚的に分かりやすい表現が出来ます
・深度センサー(KinectやRealSenseやXtion等のDepthカメラ)
・サーモグラフィー
・照明ムラ
など
OpenCVに疑似カラーを付けるAPI(applyColorMap())があったため、本投稿にメモ。
動画は以下。
www.youtube.com
ソースコードは以下。
本来ならサーモグラフィー等の画像を取り込みたいところですが、
Webカメラしかなかったので、グレースケール画像を取り込んで疑似カラーを付けてます。
色々なパターンがあるため、N押下で切り替えれるようにサンプルを作成。
#!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as np import cv2 import copy colormap_table_count = 0 colormap_table = [ ['COLORMAP_AUTUMN', cv2.COLORMAP_AUTUMN ], ['COLORMAP_JET', cv2.COLORMAP_JET ], ['COLORMAP_WINTER', cv2.COLORMAP_WINTER ], ['COLORMAP_RAINBOW', cv2.COLORMAP_RAINBOW], ['COLORMAP_OCEAN', cv2.COLORMAP_OCEAN ], ['COLORMAP_SUMMER', cv2.COLORMAP_SUMMER ], ['COLORMAP_SPRING', cv2.COLORMAP_SPRING ], ['COLORMAP_COOL', cv2.COLORMAP_COOL ], ['COLORMAP_HSV', cv2.COLORMAP_HSV ], ['COLORMAP_PINK', cv2.COLORMAP_PINK ], ['COLORMAP_HOT', cv2.COLORMAP_HOT ] ] video_input = cv2.VideoCapture(0) while(1): ret, frame = video_input.read() # グレースケール化 grayscale_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 疑似カラーを付与 apply_color_map_image = cv2.applyColorMap(grayscale_image, colormap_table[colormap_table_count % len(colormap_table)][1]) cv2.putText(apply_color_map_image, colormap_table[colormap_table_count % len(colormap_table)][0], (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0,0,0),2); cv2.imshow('apply_color_map_image',apply_color_map_image) k = cv2.waitKey(50) & 0xff if k == 110: # N colormap_table_count = colormap_table_count + 1 if k == 27: # ESC break video_input.release() cv2.destroyAllWindows()