画像処理ライブラリOpenCVのcvtColorにより色空間の変換ができる。頻繁に行われるBGR色空間からグレースケールへの変換、BGR色空間からHSV色空間への変換を説明する。
OpenCVを使うには次のようにインポートが必要。
import cv2
使用する画像 'iwojima.jpg'(幅400ピクセルx高さ300ピクセル)は以下(フリー写真素材ぱくたそより)
1. BGR色空間からグレースケールへの変換
cvtColorの書式は以下。dstが変換前の画像、srcが変換後の画像、codeが変換方法を示すコードとなる。
dst = cvtColor(src, code)
BGR色空間→グレースケール変換の場合、codeにcv2.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色空間の変換の場合、codeにcv2.COLOR_BGR2HSVを用いる。
dst = cvtColor(src, cv2.COLOR_BGR2HSV)
HSV色空間→BGR色空間の変換の場合、codeにcv2.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
0 件のコメント:
コメントを投稿