openCV学习笔记十九:人脸检测

首先我们的人脸检测实验中需要两个训练好的文件放在我们主程序目录下,如图所示:
在这里插入图片描述
在这里插入图片描述
这是两个文件的链接
链接:https://pan.baidu.com/s/141rwGLrnPUV7S1WSPfV4kQ
提取码:paqd
在人脸检测中我们只需检测到人脸和眼睛部位

// A code block
var foo = 'bar';

图片中的人脸检测

#include <iostream>
#include <cv.h>
#include <highgui.h>
#include <windows.h>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
 Mat image, image_gray;      //定义两个Mat变量,用于存储每一帧的图像
 image = imread("8.png");
 imshow("原图", image);
cvtColor(image, image_gray, CV_BGR2GRAY);//转为灰度图
 equalizeHist(image_gray, image_gray);//直方图均衡化,增加对比度方便处理
 CascadeClassifier eye_Classifier;  //载入分类器
 CascadeClassifier face_cascade;    //载入分类器
 if (!eye_Classifier.load("haarcascade_eye.xml"))  //需要将xml文档放在自己指定的路径下
{
  cout << "Load haarcascade_eye.xml failed!" << endl;
  return 0;
 }
if (!face_cascade.load("haarcascade_frontalface_alt.xml"))
 {
  cout << "Load haarcascade_frontalface_alt failed!" << endl;
  return 0;
 }
 //vector 是个类模板 需要提供明确的模板实参 vector<Rect>则是个确定的类 模板的实例化
 vector<Rect> eyeRect;
 vector<Rect> faceRect;
 //检测关于眼睛部位位置
 eye_Classifier.detectMultiScale(image_gray, eyeRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
for (size_t eyeIdx = 0; eyeIdx < eyeRect.size(); eyeIdx++)
 {
  rectangle(image, eyeRect[eyeIdx], Scalar(0, 0, 255));   //用矩形画出检测到的位置
 }
 //检测关于脸部位置
face_cascade.detectMultiScale(image_gray, faceRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
 for (size_t i = 0; i < faceRect.size(); i++)
 {
  rectangle(image, faceRect[i], Scalar(0, 0, 255));      //用矩形画出检测到的位置
 }   
imshow("人脸识别图", image);         //显示当前帧
 waitKey(0);
}

在这里插入图片描述

// A code block
var foo = 'bar';

摄像头中视频中的人脸检测:

#include <iostream>
#include <cv.h>
#include <highgui.h>
#include <windows.h>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
Mat image, image_gray;      //定义两个Mat变量,用于存储每一帧的图像
 VideoCapture capture(0);    //从摄像头读入视频
 while (1)                   //循环每一帧
 {
 capture >> image;      //读取当前帧
  cvtColor(image, image_gray, CV_BGR2GRAY);//转为灰度图
  equalizeHist(image_gray, image_gray);//直方图均衡化,增加对比度方便处理
  CascadeClassifier eye_Classifier;  //载入分类器
  CascadeClassifier face_cascade;    //载入分类器
  if (!eye_Classifier.load("haarcascade_eye.xml"))  //需要将xml文档放在自己指定的路径下
  {
   cout << "Load haarcascade_eye.xml failed!" << endl;
   return 0;
  }
 if (!face_cascade.load("haarcascade_frontalface_alt.xml"))
  {
   cout << "Load haarcascade_frontalface_alt failed!" << endl;
   return 0;
  }
//vector 是个类模板 需要提供明确的模板实参 vector<Rect>则是个确定的类 模板的实例化
  vector<Rect> eyeRect;
  vector<Rect> faceRect;
  //检测关于眼睛部位位置
  eye_Classifier.detectMultiScale(image_gray, eyeRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
  for (size_t eyeIdx = 0; eyeIdx < eyeRect.size(); eyeIdx++)
  {
   rectangle(image, eyeRect[eyeIdx], Scalar(0, 0, 255));   //用矩形画出检测到的位置
  }
  //检测关于脸部位置
 face_cascade.detectMultiScale(image_gray, faceRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
  for (size_t i = 0; i < faceRect.size(); i++)
  {
   rectangle(image, faceRect[i], Scalar(0, 0, 255));      //用矩形画出检测到的位置
  }
  imshow("人脸识别图", image);         //显示当前帧
  waitKey(10);         //延时10ms,即每秒播放100帧图像
  }
  }    

运行结果如下:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值