OpenCVでカラー→モノクロ変換、カラーのデータの並びを入れ替えるBGR⇔RGB変換、色抽出の前処理として使われるHSV変換や、Bayer画像をカラー画像に変換するなど、主にカラー画像の変換を行うにはcvtColor()関数を用います。
構文
cvtColor( src, code[, dst[, dstCn]] ) -> dst
引数
src | 色変換を行う画像データを指定します。 色変換を行う種類(code)に合わせた画像データを指定します。 |
code | 色変換の種類を指定します。 cv2.COLOR_BGR2GRAYなど。詳細は別途 |
dstCn | 出力画像のチャンネル数 この値が0のバイア、チャンネル数はsrcとcodeから自動的に求められます。 と、あるのですが、詳細は分からず。。 |
戻り値
dst | 変換された画像データ |
codeの設定について
codeの設定により、様々な色変換を指定できます。
コードのフォーマットは
変換前 2 変換後
となっています。
さらに、例えばOpenCVのカラー画像の場合、BGRと指定するように、画像データの並びの順番で色を指定する必要があります。
codeの種類は非常に多くあるのですが、個人的に使った事のある、使いそうなcodeを以下に示します。
COLOR_BGR2GRAY | カラー画像(8bit3ch)をグレースケールの画像に変換します。 |
COLOR_BGRA2GRAY | カラー画像(8bit4ch)をグレースケールの画像に変換します。 |
COLOR_GRAY2BGR | グレースケールの画像をカラー画像(8bit3ch)に変換します。 B,G,Rの値はすべてGRAYの値と同じ |
COLOR_GRAY2BGRA | グレースケールの画像をカラー画像(8bit4ch)に変換します。 B,G,Rの値はすべてGRAYの値と同じ Aの値は255 |
COLOR_BGR2RGB | OpenCVのカラー画像(BGR)のデータの並びをR,G,Bの順に変換します。 他のPythonモジュールとデータの受け渡し時に用います。 |
COLOR_RGB2BGR | データの並びがR,G,B順のカラー画像をOpenCVのカラー画像(BGR)に変換します。 |
COLOR_BGR2HSV | カラー(BGR)からHSVに変換します。 色相(Hue)の値は0~360°で計算されますが、R,G,Bの各データが8bitのとき値が0~255の範囲なので、Hueの値は半分の0~128となります。 |
COLOR_HSV2BGR | HSVからカラー(BGR)に変換します。 Hueの値は0~360°の半分の0~180で指定する必要があります。 |
COLOR_BGR2HSV_FULL | カラー(BGR)からHSVに変換します。 色相(Hue)の値は0~360°で計算されますが、R,G,Bの各データが8bitのとき値が0~360°の値を0~255に均等に割り振られます。 |
COLOR_HSV2BGR_FULL | HSVからカラー(BGR)に変換します。 Hueの値は0~360°の値を0~255に均等に割り振られた値で指定する必要があります。 |
COLOR_BGR2YUV | カラー(BGR)からYUVに変換します。 |
COLOR_YUV2BGR | YUVからカラー(BGR)に変換します。 |
COLOR_BayerBGGR2BGR | Bayerパターンからカラー(BGR)に変換します。 |
COLOR_BayerGBRG2BGR | Bayerパターンからカラー(BGR)に変換します。 |
COLOR_BayerRGGB2BGR | Bayerパターンからカラー(BGR)に変換します。 |
COLOR_BayerGRBG2BGR | Bayerパターンからカラー(BGR)に変換します。 |
他のコードの種類については、下記ページを参照ください。
https://docs.opencv.org/4.8.0/d8/d01/group__imgproc__color__conversions.html#ga4e0972be5de079fed4e3a10e24ef5ef0
色変換式については下記ページを参照してください。
https://docs.opencv.org/4.8.0/de/d25/imgproc_color_conversions.html
サンプルプログラム
カラー(BGR)→モノクロ(GRAY)変換を行った例を以下に示します。
import cv2
# 画像ファイルの読込
src = cv2.imread("Mandrill.bmp", cv2.IMREAD_UNCHANGED)
# カラー(BGR)→モノクロ(GRAY)変換
dst = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
# 処理前画像の表示
cv2.imshow("Src Image", src)
# カラー→モノクロ変換後の画像表示
cv2.imshow("COLOR_BGR2GRAY", dst)
# キー入力待ち
cv2.waitKey()
実行結果
参照ページ
https://docs.opencv.org/4.8.0/d8/d01/group__imgproc__color__conversions.html#ga397ae87e1288a81d2363b61574eb8cab
https://docs.opencv.org/4.8.0/d8/d01/group__imgproc__color__conversions.html#ga4e0972be5de079fed4e3a10e24ef5ef0
https://docs.opencv.org/4.8.0/de/d25/imgproc_color_conversions.html