级联分类器人脸检测

来源:互联网 发布:数学专业程序员 编辑:程序博客网 时间:2024/05/20 00:15

#include <opencv2/opencv.hpp>   #include <iostream>#include <stdio.h>using namespace std;using namespace cv;CascadeClassifier face_cascade, eyes_cascade;String window_name = "Face Detection";void detectFaces(Mat frame) {  std::vector<Rect> faces;  Mat frame_gray;  // 灰度变换  cvtColor(frame, frame_gray, COLOR_BGR2GRAY);  // 直方图均衡  equalizeHist(frame_gray, frame_gray);  // 多尺度人脸检测  face_cascade.detectMultiScale(frame_gray, faces,     1.1, 3,0|CASCADE_SCALE_IMAGE, Size(30, 30));  // 人脸检测结果判定  for(size_t i = 0; i < faces.size(); i++)  {    // 检测到人脸中心    Point center(faces[i].x + faces[i].width/2,       faces[i].y + faces[i].height/2);    Mat face = frame_gray(faces[i]);    std::vector<Rect> eyes;    // 在人脸区域检测人眼    eyes_cascade.detectMultiScale(face, eyes, 1.1, 2,  0 |CASCADE_SCALE_IMAGE, Size(30, 30) );    if(eyes.size() > 0)      // 绘制人脸      ellipse(frame, center, Size(faces[i].width/2,         faces[i].height/2),      0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );  }  imshow( window_name, frame );}int main() {  // 摄像头读取  VideoCapture cap(0);   Mat frame;  // 初始化haar级联人脸分类器XML  face_cascade.load("haarcascade_frontalface_alt.xml");   // 初始化haar级联人眼分类器XML  eyes_cascade.load("haarcascade_eye_tree_eyeglasses.xml");   if (face_cascade.empty() || eye_cascade.empty()      || !cap.isOpened())    return 1;    while(cap.read(frame))   {    // 人脸检测    detectFaces(frame);     if( waitKey(30) >= 0)          break;  }  return 0;}




转载:http://blog.csdn.net/zhuwei1988

0 0