2016-01-13 2 views
2

Я пытаюсь получить сообщение, когда центр моего лица переходит в ROI, можно ли его обнаружить? или он не работает таким образом? (Я только начал с OpenCV)Определить центр лица в ROI

Это мой код:

import cv2 
import sys 
import numpy as np 

cascPath = 'haarcascade_frontalface_default.xml' 
faceCascade = cv2.CascadeClassifier(cascPath) 
video_capture = cv2.VideoCapture(0) 

while True: 
    ret, frame = video_capture.read() 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    roiLeft = frame[0:0, 200:480] 
    roiRight = frame[640:0, 440:480] 
    faces = faceCascade.detectMultiScale(
     gray, 
     scaleFactor=1.2, 
     minNeighbors=1, 
     minSize=(120, 120), 
     flags=cv2.cv.CV_HAAR_SCALE_IMAGE 
    ) 

    for (x, y, w, h) in faces: 
     centerFrame = x+w/2,y+h/2 
     cv2.circle(frame,(x+w/2,y+h/2),10,(0,0,255),-1) 
     cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 
     if centerFrame in frame[640:0, 440:480]: 
      print("OOOOOOOOHHHHHHHH") 

    cv2.imshow('Video', frame) 

    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

video_capture.release() 
cv2.destroyAllWindows() 

ответ

3

Одним из возможных решений (подход) является:

1: Определить среднюю Min & значения не более HSV вашего цвета лица. 2: Пороговая часть ROI с cv2.inRange(hsv, COLOR_MIN, COLOR_MAX) значение.

3: Если изображение содержит значение HSV между определенными значениями HSV, что часть изображения будет белой иначе черным

Как это: red ball area = white

4: Найти площадь контура, как вы сказали, что вы хотите ваше лицо должно быть распознано, поэтому я думаю, что область должна быть как минимум 8000 или более, если площадь контура равна или максимальна, то это ваше лицо еще не.

Прочитано blog, Global Threholding часть, извлечение розового цвета.

Смежные вопросы