【Python+OPENCV】検出したい物体の色を抽出する!
1.はじめに
画像処理の手法のひとつにHSV変換がある。これは、一般的によく使われるRGB色空間を変換して、HSV色空間にする。このHSVは、H(色相)、S(彩度)、V(明度)の3つのパラメータで色を表現する。
2.何に使えるか?
最も利用される理由として、対象物体(検出したい物体)の色を特徴量としたいためである。RGB色空間で十分じゃない??と思うのですが、RGBは3原色を混ぜ合わせ色を作るため、パラメータが3つ必要!それに対して、HSVはH(色相)の1つですべての色を表現できるのである(ただし、黒と白は色相をもたない!) また、対象物体の色のS(彩度=鮮やかさ)もパラメータとして制御できるためRGBより対象物体の色抽出をしやすいのである。
import cv2
img = cv2.imread("sample.jpg") #入力画像を読み込む
Ex_img = np.zeros((h,w,1),np.uint8) #抽出結果を格納する画像を初期化(全部黒にする)
h = img.shape[0] #画像の縦ピクセル数を取得
w = img.shape[1] #画像の横ピクセル数を取得
th1 = 0 #青色の色相の下限値
th2 = 33 #青色の色相の上限値
hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV) #入力画像をHSV変換する
for j in range(h): #画像の縦方向を操作する
for i in range(w): #画像の横方向を操作する
if hsv[j,i,0] >= th1: #色相(hsv[j,i,0])が閾値より大きい
if hsv[j,i,0] <= th2: #色相(hsv[j,i,0])が閾値より小さい
Ex_img[j,i] = 255 #物体の領域と判断して、白の画素を入れる。
4.結果
サンプルとして青色のワイヤだけを抽出しました。こんなかんじになります。色相のパラメータは事前に調べておく必要があります。次回はその決定方法について、書いてみます