はじめに
OpenCV-Python のカラースペースに関するこのチュートリアルへようこそ!
カラースペースは、画像内の色チャネルを表現する方法です。いくつかの異なるカラースペースがありますが、最も一般的なものは 3 つです。
- BGR(青、緑、赤):OpenCV で使用される既定のカラースペース。
- グレー:画像のグレースケール表現。
- HSV(色相、彩度、明度):色の円筒座標表現。
このチュートリアルでは、BGR、グレー、および HSV カラースペース間で画像を変換することに焦点を当てます。
OpenCV-Python のカラースペースに関するこのチュートリアルへようこそ!
カラースペースは、画像内の色チャネルを表現する方法です。いくつかの異なるカラースペースがありますが、最も一般的なものは 3 つです。
画像をカラースペース間で変換するには、cv.cvtColor()関数を使用します。まず、必要なライブラリをインポートして画像を読み込みましょう。
ターミナルに次のコマンドを入力して Python シェルを開きます。
python3
既定のフォルダに用意した画像image.jpgを読み込むには、cv.imread()関数を使用します。
import cv2 as cv
import numpy as np
## 画像を読み込む
image = cv.imread('image.jpg')
画像を BGR からグレースケールに変換するには、cv.COLOR_BGR2GRAYフラグを使用します。
## 画像をグレースケールに変換する
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
画像を 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()関数を使用できます。この例では、画像から青色の物体を抽出します。
まず、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)を試してみることもできます。