aidiary
4/17/2017 - 8:09 AM

HSVの範囲による肌色領域の検出

HSVの範囲による肌色領域の検出

import numpy as np
import cv2

HSV_MIN = np.array([0, 30, 60])
HSV_MAX = np.array([20, 150, 255])

cap = cv2.VideoCapture(0)

# 初期背景を設定するため画像取得
ret, frame = cap.read()
background = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

while True:
    ret, frame = cap.read()

    # 背景画像との差分を取る
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    diff = cv2.absdiff(gray, background)

    # 肌色検出がしやすいようにBGRからHSVに変換
    hsv_image = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    hsv_mask = cv2.inRange(hsv_image, HSV_MIN, HSV_MAX)

    # 色相が肌色に近い部分を抽出
    cv2.imshow('Capture', frame)
    cv2.imshow('hsv_mask', hsv_mask)

    key = cv2.waitKey(10)
    if key == ord('q'):
        break
    elif key == ord('b'):
        # bを押したらその時点でのキャプチャを背景とする
        ret, frame = cap.read()
        background = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

cap.release()
cv2.destroyAllWindows()