利用opencv進行人臉檢測的簡單程序:
#include<iostream>
#include<stdio.h>
#include<vector>
#include<time.h>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/objdetect/objdetect.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
//計時函數
inline double cpu_time(){
return clock()*1000/CLOCKS_PER_SEC;
}
void detectAndDraw(Mat& img, CascadeClassifier& cascade);
int main(){
Mat image;
image = imread("1.jpg");
resize(image,image,Size(256,256));
CascadeClassifier cascade;//nestedCascade;
cascade.load("haarcascade_frontalface_alt.xml");
namedWindow("Origninal");
imshow("Origninal",image);
waitKey(100);
getchar();
double t1,t2;
t1 = cpu_time();
detectAndDraw(image,cascade);
t2 = cpu_time();
cout<<"Time for one image: "<<t2-t1<<endl;
return 0;
}
//人臉檢測
void detectAndDraw(Mat& img, CascadeClassifier& cascade){
int i = 0;
double t = 0;
vector<Rect> faces;
Mat gray;
cvtColor(img,gray,CV_BGR2GRAY);
//1.2是每次縮放比例,1表示人臉被至少探測到兩次纔算Size爲縮到的最小尺寸
cascade.detectMultiScale(gray, faces,1.2,1,0|CV_HAAR_SCALE_IMAGE,Size(20,20));
cout<<"Total face number: "<<faces.size()<<endl;
for(int i=0; i<faces.size();i++){
Mat face;
img(faces[i]).copyTo(face);
namedWindow("Face");
imshow("Face",face);
waitKey(100);
getchar();
}
}