2012-07-06 11 views
6

He consultado la documentación provista por OpenCV para crear un programa de reconocimiento facial, reconoce varias caras y funciona normalmente. En la documentación, han hecho elipsis para resaltar la cara. Lo que no entiendo es cómo han calculado el centro de la elipse que se han calculado de la siguienteOpencv 2.4.2 Explicación de código-Reconocimiento facial

for(int i = 0; i < faces.size(); i++) 
{ 
    Point center(faces[i].x+faces[i].width*0.5,faces[i].y+faces[i].height*0.5); 
    //more code follows drawing the ellipse 

El vector de caras que están utilizando se produce de la siguiente manera

face_cascade.detectMultiScale(frame_gray,faces,1.1,2,0|CV_HAAR_SCALE_IMAGE,cv::Size(30,30)) 

La documentación es decir, el programa se da en el enlace

http://docs.opencv.org/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html

quiero saber cómo se están calculando el centro de la elipse y si quiero dibujar un rectángulo en lugar de un círculo, ¿qué debo hacer?

Respuesta

13

Las caras detectadas se devuelven como un conjunto de rectángulos que rodean las caras. Como dice la documentación, la salida es Vector of rectangles where each rectangle contains the detected object.

Así que un rectángulo se compone de [ initial x, initial y, width, height ]. Para que pueda encontrar su centro por (x + width*0.5 , y + height*0.5). Este centro es el mismo para la elipse también.

Si desea dibujar rectángulos, use la función rectangle. Vea el Documentation.

argumentos en la función serán los siguientes:

pt1 = (x , y) 

pt2 = (x + width , y + height) 

Cambio de la línea de dibujo elipse a línea siguiente:

rectangle(frame,Point (faces[i].x,faces[i].y),Point (faces[i].x+faces[i].width, faces[i].y+faces[i].height),Scalar(255,0,255),4,8,0); 

Se da el resultado como sigue:

enter image description here

4

Por cierto, OpenCV 2.4.2 incluye reconocimiento facial Ded. Este es un ejemplo tutorial y fuente completo de código para la combinación de detección de rostros (con el cv :: CascadeClassifier) ​​y el reconocimiento de rostros (con el cv :: FaceRecognizer):

Has solicitado que el reconocimiento de rostros . También muestra cómo hacer la detección de rostros, por lo que puede ser interesante también.

+0

He visto esto. Gracias. –

+0

No es compatible con varios modelos para reconocer múltiples caras de un video. ¿Cómo se puede modificar este código de código para esto? Una forma ingenua será mantener una lista de modelos de rostro, sin embargo, esto no parece una implementación eficiente. – Tariq