ここでは、色の表し方「色空間」と、グレースケール変換についてまとめています。
OpenCV の色空間「HSV」
色空間とは、色の表し方です。
画像処理の基本知識で紹介した最も一般的な色空間「RGB」の他に、「HSV」という色空間があります。
HSVは以下の3要素で表現されます。
- 色相:H(Hue):0~359
- 彩度:S(Saturation):0~100%
- 明度:V(Value):0~100%
ポイント
HSVのメリットは、「色」自体を表現しやすいということ。
OpenCV で HSV を扱う場合は、以下の範囲で画素値が表されます。
- 色相:H:0~179
- 彩度:S:0~255
- 明度:V:0~255
OpenCV でのグレースケール
グレースケールは、色の強度という1つの情報で画像を表現します。
RGB:3つの情報で画像を表現
グレースケール:色の強度だけで画像を表現
RGB画像からグレースケール画像を生成するには、以下の式を使って計算します。
グレースケール計算式
Gray = (0.2989 × Red) + (0.5870 × Green) + (0.1140 × Blue)
OpenCV で色空間を変換
これまで、画像の表現方法として HSV とグレースケールについて紹介しましたので、
OpenCV を使って RGB 画像から変換する方法をご紹介いたします。
OpenCV の標準APIである cvtColor(<画素値の numpy 配列>, <変換種別>) で簡単に変換できます。
1 2 3 4 5 6 7 8 9 10 11 |
import cv2 img = cv2.imread("sample.jpg") img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow("img", img) cv2.imshow("gray", img_gray) cv2.waitKey(0) cv2.destroyAllWindows() |
- 1~3行目:元画像を読み込んでいます
- 4行目:cvtColor() API を使用して、RGBからHSVの色空間へ変換しています
※OpenCV では BGR の順で画素を表すため、BGR2HSV という名称になっています - 5行目:cvtColor() API を使用して、RGBからグレースケールの色空間へ変換しています
- 6行目以降:画像を表示します
Tips:おまけ
OpenCV では、画像を読み込む際に第2引数に 0 を指定することで
グレースケール画像として読み込むことができます。
グレースケール読み込み
img_gray = cv2.imread("sample.jpg", 0)