はじめに
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)を試してみることもできます。