级联分类器人脸检测

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分类训练的人脸识别。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值