Opencv 2.4.2代码解释 - 面部识别

时间:2012-07-06 04:12:59

标签: c++ opencv computer-vision face-recognition

我已经参考了OpenCV提供的文档来制作人脸识别程序,它识别多个面孔并且正常工作。在文档中,他们制作了椭圆来突出脸部。我不明白的是他们如何计算椭圆的中心,他们计算如下

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

他们正在使用的面部矢量生成如下

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

文件即程序在链接

中给出

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

我想知道他们是如何计算椭圆的中心的,如果我想画一个矩形而不是圆形,我该怎么做?

2 个答案:

答案 0 :(得分:13)

检测到的面将作为一组围绕面的矩形返回。如文档所述,输出为Vector of rectangles where each rectangle contains the detected object.

因此,一个矩形由[ initial x, initial y, width, height ]组成。所以你可以通过( x + width*0.5 , y + height*0.5 )找到它的中心。椭圆的中心也是一样的。

如果要绘制矩形,请使用rectangle功能。请参阅Documentation

函数中的参数如下:

pt1 = ( x , y )

pt2 = ( x + width , y + height )

将线条图椭圆更改为以下行:

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

结果如下:

enter image description here

答案 1 :(得分:4)

顺便说一句,OpenCV 2.4.2包含了人脸识别功能。这是一个教程和完整的源代码示例,用于组合面部检测(使用cv :: CascadeClassifier)和面部识别(使用cv :: FaceRecognizer):

因为你要求进行人脸识别。它还展示了如何进行人脸检测,因此它也可能很有趣。