Pythonでさまざまな色空間を使って画像を可視化する方法
OpenCV-Pythonとは
OpenCV-Pythonは、コンピュータビジョンの問題を解決するために設計されたPythonバインディングのライブラリです。内部では、MATLAB風の構文を持ち、数値演算に高度に最適化されたNumpyを利用しており、OpenCVのすべての配列構造はNumpy配列と相互に変換されます。
この記事では、OpenCVを使って画像をRGB(BGR)、グレースケール、YCrCb、HSVといったさまざまな色空間で読み込み・表示する方法を、サンプルコード付きで解説します。
各色空間での画像表示例
1. RGB(BGR)として画像を読み込んで表示する
cv2.imread()はデフォルトでBGR形式の画像を読み込みます。matplotlibのimshow()でそのまま表示する場合は、チャンネルの順序に注意してください。
# 画像をRGBとして読み込む
import cv2
import matplotlib.pyplot as plt
# 画像を読み込む(OpenCVはデフォルトでBGR形式)
img = cv2.imread('download.png')
# 画像を表示
plt.imshow(img)2. グレースケールとして読み込む
imread()の第2引数に0を指定すれば最初からグレースケールで読み込めます。また、すでに読み込んだ画像に対しては、cv2.cvtColor()でCOLOR_BGR2GRAYを指定して変換することも可能です。
# 画像をグレースケールとして読み込む
import cv2
# グレースケールで読み込む
img = cv2.imread('download.png', 0)
# または cv2.cvtColor を使って変換することもできる
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 画像を表示
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()3. YCrCb色空間として読み込む
YCrCbは輝度(Y)と色差成分(Cr・Cb)で色を表現する色空間で、JPEG圧縮などで広く利用されています。
# 画像をYCrCb色空間として読み込む
import cv2
# 画像を読み込む
img = cv2.imread('download.png')
# YCrCb色空間に変換
img = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
# 画像を表示
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()4. HSV色空間として読み込む
HSVは色相(Hue)、彩度(Saturation)、明度(Value)で色を表現する色空間です。特定の色に基づいて物体を検出したい場合などに特に便利です。
# 画像をHSV色空間として読み込む
import cv2
# 画像を読み込む
img = cv2.imread('download.png')
# HSV色空間に変換
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 画像を表示
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()5. ヒートマップとして表示する
matplotlibのimshow()でcmap引数に「hot」を指定すると、画像をヒートマップ風に可視化できます。
# 画像のヒートマップ
import matplotlib.pyplot as plt
import cv2
# 画像を読み込む
img = cv2.imread('download.png')
# ヒートマップとしてプロット
plt.imshow(img, cmap='hot')6. スペクトラルマップとして表示する
cmapに「nipy_spectral」を指定すると、スペクトラルカラーマップによる鮮やかな可視化が可能です。
# 画像のスペクトラルマップ
import matplotlib.pyplot as plt
import cv2
img = cv2.imread('download.png')
plt.imshow(img, cmap='nipy_spectral')主な色空間の比較
| 色空間 | 構成要素 | 主な用途 |
|---|---|---|
| BGR / RGB | 青・緑・赤 | 一般的な画像表示・処理 |
| グレースケール | 輝度のみ | エッジ検出・前処理 |
| YCrCb | 輝度+色差 | JPEG圧縮・肌色検出 |
| HSV | 色相・彩度・明度 | 色ベースの物体検出 |
まとめ
OpenCVのcv2.cvtColor()を使えば、わずか1行のコードで画像を任意の色空間へ変換できます。目的に応じて適切な色空間を選択することで、画像処理の精度や効率を大きく向上させることができます。
-
Python・OpenCVでヒストグラム平坦化を実装する方法|cv2.equalizeHist()の使い方
ヒストグラム平坦化(Histogram Equalization)とは ヒストグラム平坦化は、画像処理において画像のヒストグラムを利用してコントラストを調整する手法です。 この手法は、多くの画像の全体的なコントラストを向上させる効果があります。特に、画像内の有効なデータが近いコントラスト値で表現されている場合に威力を発揮します。この調整を行うことで、輝度値がヒストグラム上により均等に分布するようになり、局所的にコントラストが低い領域でも高いコントラストを得られるようになります。 OpenCVの cv2.equalizeHist() 関数 OpenCVには、この処理を実行するための関数 cv2
-
【Python】Tkinterで作るカラーゲーム – 30秒で文字の色を当てるGUIゲーム開発
GUIアプリケーションの開発において、Pythonの標準ライブラリ「Tkinter」は非常に人気が高く、初心者でも扱いやすいツールです。追加のインストール作業なしに使えるため、Tkinterを活用すればシンプルなGUIゲームでも手軽に開発できます。 この記事では、Tkinterを使った「カラーゲーム」の作り方を紹介します。このゲームでは、画面に表示される単語の文字色をプレイヤーが入力し、正解するたびにスコアが1点ずつ加算されます。制限時間は30秒で、使用される色は赤(Red)、青(Blue)、緑(Green)、ピンク(Pink)、黒(Black)、黄(Yellow)、オレンジ(Orange)、