2012-07-06 20 views
6

Ho fatto riferimento alla documentazione fornita da OpenCV per realizzare un programma di riconoscimento facciale, riconosce più facce e funziona normalmente. Nella documentazione hanno fatto delle ellissi per evidenziare il viso. Quello che non capisco è come hanno calcolato il centro dell'ellisse che hanno calcolato come segueOpencv 2.4.2 Codice Explaination-Face Recognition

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 

Il vettore facce che stanno usando è prodotto come segue

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

La documentazione vale a dire il programma è dato nel link

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

voglio sapere come stanno calcolando il centro dell'ellisse e se voglio disegnare un rettangolo invece di un cerchio, cosa devo fare?

risposta

13

I volti rilevati vengono restituiti come un insieme di rettangoli che circondano le facce. Come dice la documentazione, l'output è Vector of rectangles where each rectangle contains the detected object.

Quindi un rettangolo è composto da [ initial x, initial y, width, height ]. Quindi puoi trovare il suo centro per (x + width*0.5 , y + height*0.5). Anche questo centro è lo stesso per l'ellisse.

Se si desidera disegnare rettangoli, utilizzare la funzione rectangle. Vedi lo Documentation.

argomenti nella funzione saranno le seguenti:

pt1 = (x , y) 

pt2 = (x + width , y + height) 

Modificare la linea disegno ellisse seguente riga:

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); 

Si dà il risultato come segue:

enter image description here

4

A proposito, OpenCV 2.4.2 è dotato di riconoscimento del volto ded. Ecco un tutorial e sorgente completo codice di esempio per la combinazione di rilevamento del viso (con cv :: CascadeClassifier) ​​e il riconoscimento del volto (con cv :: FaceRecognizer):

Poiché hai chiesto il riconoscimento del volto . Mostra anche come eseguire il rilevamento del volto, quindi potrebbe essere interessante.

+0

Ho visto questo. Grazie. –

+0

Non supporta più modelli per il riconoscimento di più facce da un video. Come può essere modificato questo codice? Un modo ingenuo sarà quello di mantenere un elenco di facemodel, tuttavia, questa non sembra un'implementazione efficiente. – Tariq