采用默认人脸分类器,返回整个中的视频的人脸。
vector<Rect> getFaceRect(String videoPath)
{
String cascadeName="haarcascade_frontalface_alt.xml";
CascadeClassifier cascade;
VideoCapture cap;
vector<Rect> faces;
//cin>>cascadeName;
if(!cascade.load(cascadeName))
{
cerr<<"WARNING: Could not load classifier cascade for nested objects"<<endl;
exit(0);
}
namedWindow("Faces", 1);
if(videoPath.length() == 1 && videoPath == "c"){
cap.open(0);
}else{
cap.open(videoPath);
}
Mat rawFrame, drawFrame;
int i;
while(cap.isOpened())
{
cap >> rawFrame;
drawFrame = rawFrame.clone();
i = 0;
cascade.detectMultiScale(rawFrame, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30));
for(vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++, i++)
{
rectangle(drawFrame, Point(r->x, r->y), Point(r->x + r->width, r->y + r->height), Scalar(0,0,200), 3, 4);
}
imshow("Faces", drawFrame);
if(waitKey(30) == 27) break;
}
destroyAllWindows();
return faces;
}
实验结果: