2022年5月6日金曜日

【OpenCV】cvtColorによるBGRからグレースケール, HSVへの色空間変換

 画像処理ライブラリOpenCVcvtColorにより色空間の変換ができる。頻繁に行われるBGR色空間からグレースケールへの変換、BGR色空間からHSV色空間への変換を説明する。

OpenCVを使うには次のようにインポートが必要。

import cv2

 使用する画像 'iwojima.jpg'(幅400ピクセルx高さ300ピクセル)は以下(フリー写真素材ぱくたそより)





1. BGR色空間からグレースケールへの変換

 cvtColorの書式は以下。dstが変換前の画像、srcが変換後の画像、codeが変換方法を示すコードとなる。

dst = cvtColor(src, code)

BGR色空間→グレースケール変換の場合、codecv2.COLOR_BGR2GRAYを用いる。

dst = cvtColor(src, cv2.COLOR_BGR2GRAY)

BGR色空間→グレースケール変換し変換後の画像をファイルに保存する例

import cv2
from cv2 import imwrite

img = cv2.imread('iwojima.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv2.imwrite('gray.jpg', gray)



2. BGR色空間からHSV色空間への変換

 HSV色空間はH(Hue:色相)、S(Saturation:彩度)、V(Value:明度)3チャンネルからなる色空間で、OpenCVではH[0,179], S[0,255],V[0,255]の範囲の値をとる。OpenCVのカラー画像はBGR色空間だが、HSV色空間に変換することで色相、彩度、明度を独立して調整することが可能になる。

 BGR色空間→HSV色空間の変換の場合、codecv2.COLOR_BGR2HSVを用いる。

dst = cvtColor(src, cv2.COLOR_BGR2HSV)

HSV色空間→BGR色空間の変換の場合、codecv2.COLOR_HSV2BGRを用いる。

dst = cvtColor(src, cv2.COLOR_HSV2BGR)

HSV色空間の画像はimwriteによるファイル保存等ができないため、BGR色空間に変換する必要がある。

色相Hの値を90°変更する例。h値が90より小さい画素に90加算、h値が90より大きい画素は90引いている。

import cv2
import numpy as np
from cv2 import imwrite

img = cv2.imread('iwojima.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

hsv[:, :, 0] = np.where(hsv[:, :, 0]<90,
                        hsv[:, :, 0]+90,
                        hsv[:, :, 0]-90)
bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

cv2.imwrite('h90.jpg', bgr)



彩度Sの値を0.5倍する例。

import cv2
from cv2 import imwrite

img = cv2.imread('iwojima.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

hsv[:, :, 1] = hsv[:, :, 1]*0.5
bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

cv2.imwrite('s05.jpg', bgr)



明度Vの値に+30加算する例。加算後に255を越えた画素は255としている。

import cv2
import numpy as np
from cv2 import imwrite

img = cv2.imread('iwojima.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

hsv[:, :, 2] = np.where(hsv[:, :, 2]<226, 
                        hsv[:, :, 2]+30,
                        255)
bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

cv2.imwrite('v30.jpg', bgr)



3. リファレンス

OpenCV > Color Space Conversions > cvtColor()
OpenCV > Color conversions

使用したバージョン:Python 3.10.4 / OpenCV 4.5.5

0 件のコメント:

コメントを投稿