Opencv face detection人臉檢測

利用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();
    }   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章