色にはRGBやHSVなどの複数の表現手法(色空間)がある。
openCVではcv2.cvtColorという関数を用いて、画像の色空間を変換することができる。
cv2.cvtColor(入力画像, code, dst, dstCn)
引数は以下の通り。
| 入力画像(必須) | 入力画像 |
| code(必須) | 色空間変換コード |
| dst(任意) | 出力画像。指定された場合、結果がこの変数に格納される。指定されない場合は、新しい配列が作成されて結果が格納され戻り値として取得できる。 |
| dstCn(任意) | 出力画像のチャンネル数 |
codeには以下のようなものがある。
| cv2.COLOR_BGR2RGB | BGRからRGBへチャンネルの並びを変換する。 |
| cv2.COLOR_BGR2GRAY | BGRからグレースケールに変換する。 |
| cv2.COLOR_BGR2XYZ | BGRからXYZに色空間を変換する。 |
| cv2.COLOR_BGR2HSV | BGRからHSVに色空間を変換する。色相(H)のレンジは8bit画像の場合、0〜180。 |
| cv2.COLOR_BGR2Lab | BGRからLab*に色空間を変換する。 |
| cv2.COLOR_BGR2Luv | BGRからLuv*に色空間を変換する。 |
| cv2.COLOR_BGR2HLS | BGRからHLSに色空間を変換する。色相(H)のレンジは8bit画像の場合、0〜180。 |
| cv2.COLOR_HSV2BGR | HSVからBGRに色空間を変換する。色相(H)のレンジは8bit画像の場合、0〜180。 |
| cv2.COLOR_HLS2BGR | HLSからBGRに色空間を変換する。色相(H)のレンジは8bit画像の場合、0〜180。 |
| cv2.COLOR_BGR2YUV | BGRからYUVに色空間を変換する。 |
これらはあくまで一例であり、実際にはより多数の色空間変換コードが存在する。
以下に画像のグレー化を行うプログラムの実行例を示す。
#!/usr/bin/python
import cv2
img = cv2.imread("neko.jpeg")
gimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("neko", gimg)
cv2.waitKey(0)
img = cv.2imread("neko.jpeg", 0)
とすることでもグレー画像の取り込みは可能だが、取り込んだ時点でグレー画像しか扱えなくなる。
cvtColor関数を用いた場合、カラー画像の情報が格納された変数imgと、グレー画像の情報が格納された変数gimgの2つが扱えるようになるため、こちらの方が無難である。