カラースペースを使った実験

OpenCVBeginner
オンラインで実践に進む

はじめに

OpenCV-Python のカラースペースに関するこのチュートリアルへようこそ!

カラースペースは、画像内の色チャネルを表現する方法です。いくつかの異なるカラースペースがありますが、最も一般的なものは 3 つです。

  • BGR(青、緑、赤):OpenCV で使用される既定のカラースペース。
  • グレー:画像のグレースケール表現。
  • HSV(色相、彩度、明度):色の円筒座標表現。
    このチュートリアルでは、BGR、グレー、および HSV カラースペース間で画像を変換することに焦点を当てます。

cv.cvtColor() 関数を使ってカラースペース間で画像を変換し表示する

画像をカラースペース間で変換するには、cv.cvtColor()関数を使用します。まず、必要なライブラリをインポートして画像を読み込みましょう。

Python シェルを開く

ターミナルに次のコマンドを入力して Python シェルを開きます。

python3

既定のフォルダに用意した画像image.jpgを読み込むには、cv.imread()関数を使用します。

import cv2 as cv
import numpy as np

## 画像を読み込む
image = cv.imread('image.jpg')

BGR からグレースケールへ

画像を BGR からグレースケールに変換するには、cv.COLOR_BGR2GRAYフラグを使用します。

## 画像をグレースケールに変換する
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

BGR から HSV へ

画像を BGR から HSV に変換するには、cv.COLOR_BGR2HSVフラグを使用します。

## HSV 色空間を使用する。HSV 色空間は主に物体追跡に使用される
hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)

変換後の画像を表示する

元の画像と変換後の画像を表示するには、cv.imwrite()関数を使用します。

## 画像を指定したファイルに保存する
cv.imwrite('image.jpg', image)
cv.imwrite('gray_image.jpg', gray_image)
cv.imwrite('hsv_image.jpg', hsv_image)

cv.inRange() 関数を使って画像から特定の色の物体を抽出する

画像から特定の色の物体を抽出するには、cv.inRange()関数を使用できます。この例では、画像から青色の物体を抽出します。

色の範囲を定義する

まず、HSV 色空間における青色の下限と上限を定義します。

## 青色は、360 度のうち約 240 度の色相で HSV で表されます。
## OpenCV-HSV の色相範囲は 0-180 で、8 ビットで値を格納します。
## したがって、青色は OpenCV-HSV では色相 H が約 240 / 2 = 120 の値として表されます。
## 青色を正しく検出するには、次の値を選択できます。
blue_lower = np.array([100, 150, 0], np.uint8)
blue_upper = np.array([140, 255, 255], np.uint8)

画像を閾値処理する

HSV 画像を閾値処理して、青色だけを取得します。

## 青色のマスク
blue_mask = cv.inRange(hsv_image, blue_lower, blue_upper)

マスクを適用する

マスクを元の画像に適用して、青色の物体を抽出します。

## マスクを使用して青色の物体を抽出する
blue_object = cv.bitwise_and(image, image, mask=blue_mask)

抽出した物体を表示する

元の画像と抽出した青色の物体を表示します。

## 画像を指定したファイルに保存する
cv.imwrite('blue_object.jpg', blue_object)

まとめ

このチュートリアルでは、OpenCV-Python のカラースペースの基本を学びました。この知識を使えば、さまざまなカラースペースを使ってさまざまな画像処理タスクに適用できます。また、OpenCV でサポートされている他のカラースペース(たとえば LAB や YCrCb)を試してみることもできます。