PythonとOpenCVを用いて画像から特定の色を抽出する方法について解説します。この記事では、BGRとHSV色空間を用いて色を抽出し、その部分だけを表示する方法を紹介します。
BGR色空間での色抽出
まずは最もオーソドックスなBGRで色を指定して抽出します。色を指定するためにはその基準となる色のRGBを知る必要があります。OpenCVでの色指定はRGBではなくBGRの順なので間違えないようにしてください。
# 青を抽出
bgr = [210,150,40]
thresh = 40
minBGR = np.array([bgr[0] - thresh, bgr[1] - thresh, bgr[2] - thresh])
maxBGR = np.array([bgr[0] + thresh, bgr[1] + thresh, bgr[2] + thresh])
maskBGR = cv2.inRange(resized_img,minBGR,maxBGR)
resultBGR = cv2.bitwise_and(resized_img, resized_img, mask = maskBGR)
HSV色空間での色抽出
次に、HSV色空間を用いて色抽出を行います。imread()で読み込んだ画像は基本BGRなので、それをHSVに変換するところから始まります。
img = cv2.imread('input/colorImage.jpg')
hsv = cv2.cvtColor(img, cv.COLOR_BGR2HSV)
色検出する場合、HSV空間の方が色検出しきい値を指定しやすいので、BGR色空間からHSV色空間に変換します。
lower = np.array([90,64,0])
upper = np.array([150,255,255])
frame_mask = cv.inRange(hsv, lower, upper)
dst = cv.bitwise_and(img, img, mask=frame_mask)
以上、PythonとOpenCVを使って特定の色を検出する方法について解説しました。この知識を活用して、さまざまな画像処理タスクに挑戦してみてください。.