脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

opencvとpythonで色抽出

OpenCVを使ってPythonで特定の色を画像から抜き出します
色を数値で表す方法としてRGBがまず上がりますが、今回はHSVという値を使います。
HSV色空間 - Wikipedia

RGBは時のごとくRed, Green, Blueで値で色を表現しますが、
HSVとは色相(Hue)、彩度(Saturation)、明度(Value)で色を表現し画像認識なんかでよく使われます

元データ

f:id:portaltan:20181101174632j:plain
この某イカの絵のピンク部分を抜き出していきまs

ソース

#!/usr/bin/python
import numpy as np
import cv2

# image info
image_file = 'ika.jpg'
img = cv2.imread(image_file)

# detect pink 
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([150, 100, 100])    # 紫に近いピンク
upper = np.array([175, 255, 255]) # 赤に近いピンク
img_mask = cv2.inRange(hsv, lower, upper)
img_color = cv2.bitwise_and(img, img, mask=img_mask)

# debug
cv2.imwrite("ika_hsv.jpg", img_color)

実行結果

f:id:portaltan:20181101175037j:plain

触手の紫を消すために少し修正

lower = np.array([157, 100, 170])
upper = np.array([175, 255, 255])

f:id:portaltan:20181102152222j:plain
いい感じにピンクが抽出できました