OpenCV人脸检测(完整源码+思路)

原创 2017年03月13日 15:54:40

本博文IDE为vs2013

OpenCV2.49


话不多说,先看视频演示(20S演示):

如下:

https://v.youku.com/v_show/id_XMjYzMzkxMTYyMA==.html?spm=a2h0w.8278793.2736843.4#paction


程序截图如下:



如何来用OpenCV来实现能。

下面给出OpenCV实现人脸检测的一般步骤:

1.加载人脸检测器

2.开启摄像头

3.对图片进行灰度处理(其实可以不处理,上图中原图的标题栏就是未进行灰度处理进行的检测,这里的灰度是为下节人脸识别打基础)

4.对图片进行直方图均衡化(其实可以不处理,上图中原图的标题栏就是未进行灰度处理进行的检测和灰度图是为进行均衡化识别,这里的均衡化是为下节人脸识别打基础)

5.人脸检测


总结下,如果单单只要人脸检测,可以的步骤是1,2,5

本博客把1,2,5,

1,2,3,5

1,2,3,4,5

都演示了出来。

下面是完整的代码,本代码还有大量注释,在此不再具体说明哪个函数有什么用。

下面上源码:

#include <opencv.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>

using namespace cv;

void Pic2Gray(Mat camerFrame,Mat &gray)
{
	//普通台式机3通道BGR,移动设备为4通道
	if (camerFrame.channels() == 3)
	{
		cvtColor(camerFrame, gray, CV_BGR2GRAY);
	}
	else if (camerFrame.channels() == 4)
	{
		cvtColor(camerFrame, gray, CV_BGRA2GRAY);
	}
	else
		gray = camerFrame;
}


int main()
{
	//加载Haar或LBP对象或人脸检测器
	CascadeClassifier faceDetector;
	std::string faceCascadeFilename = "haarcascade_frontalface_default.xml";

	//友好错误信息提示
	try{
		faceDetector.load(faceCascadeFilename);
	}
	catch (cv::Exception e){}
	if (faceDetector.empty())
	{
		std::cerr << "脸部检测器不能加载 (";
		std::cerr << faceCascadeFilename << ")!" << std::endl;
		exit(1);
	}

	//打开摄像头
	VideoCapture camera(0);
	while (true)
	{
		Mat camerFrame;
		camera >> camerFrame;
		if (camerFrame.empty())
		{
			std::cerr << "无法获取摄像头图像" << std::endl;
			getchar();
			exit(1);
		}
		Mat displayedFrame(camerFrame.size(),CV_8UC3);


		//人脸检测只试用于灰度图像
		Mat gray;
		Pic2Gray(camerFrame, gray);



		//直方图均匀化(改善图像的对比度和亮度)
		Mat equalizedImg;
		equalizeHist(gray, equalizedImg);

		//人脸检测用Cascade Classifier::detectMultiScale来进行人脸检测

		int flags = CASCADE_FIND_BIGGEST_OBJECT|CASCADE_DO_ROUGH_SEARCH;	//只检测脸最大的人
		//int flags = CASCADE_SCALE_IMAGE;	//检测多个人
		Size minFeatureSize(30, 30);
		float searchScaleFactor = 1.1f;
		int minNeighbors = 4;
		std::vector<Rect> faces;
		faceDetector.detectMultiScale(equalizedImg, faces, searchScaleFactor, minNeighbors, flags, minFeatureSize);

		//画矩形框
		cv::Mat face;
		cv::Point text_lb;
		for (size_t i = 0; i < faces.size(); i++)
		{
			if (faces[i].height > 0 && faces[i].width > 0)
			{
				face = gray(faces[i]);
				text_lb = cv::Point(faces[i].x, faces[i].y);
				cv::rectangle(equalizedImg, faces[i], cv::Scalar(255, 0, 0), 1, 8, 0);
				cv::rectangle(gray, faces[i], cv::Scalar(255, 0, 0), 1, 8, 0);
				cv::rectangle(camerFrame, faces[i], cv::Scalar(255, 0, 0), 1, 8, 0);
			}
		}


		imshow("直方图均匀化", equalizedImg);
		imshow("灰度化", gray);
		imshow("原图", camerFrame);

		waitKey(20);
	}

	getchar();
	return 0;
}






版权声明:本文为博主原创文章,未经博主允许不得转载。

【OpenCV人脸识别入门教程之二】人脸检测

本篇文章主要介绍了如何使用OpenCV实现人脸检测的功能。 要实现人脸识别功能,首先要进行人脸检测,判断出图片中人脸的位置,才能进行下一步的操作。 人脸检测的方法介绍 OpenCV中的方法 函数 ...
  • lsq2902101015
  • lsq2902101015
  • 2015年09月28日 18:27
  • 14791

opencv+人脸检测(OpenCv3.0+VS2013)

进入正题吧----------------->最近一直在弄人脸检测的代码,用的就是opencv3.0自己带的人脸检测的代码,可是一直就是出错,在网上搜了好多,一直没有找到解决的办法,可能是自己的VS2...
  • qq_31028891
  • qq_31028891
  • 2016年07月20日 23:41
  • 6940

OpenCV实践之路——人脸识别之三识别自己的脸

在之前OpenCV实践之路——人脸识别之一数据收集和预处理和OpenCV实践之路——人脸识别之二模型训练两篇博客中,已经把人脸识别的整个流程全部交代清楚了。包括今天这篇人脸识别方面的内容都已经在上述第...
  • xingchenbingbuyu
  • xingchenbingbuyu
  • 2016年05月21日 21:18
  • 38812

Python-OpenCV人脸检测(代码)

做人脸识别,首先要检测出图片/视频中的人脸,今天就研究了一下OpenCV的Python接口,把常用的一些功能模块写成函数。基于Python-OpenCV以及PIL,实现图片中人脸的检测以及截取保存、眼...
  • u012162613
  • u012162613
  • 2015年02月05日 09:04
  • 30296

opencv lbp人脸检测算法

一、 算法 算法使用的特征为MB-LBP特征 二、 xml文件格式分析
  • abc20002929
  • abc20002929
  • 2017年04月24日 23:29
  • 1061

openCV实现多人脸检测,多眼部检测,完整代码和详细注释

一,说明及环境        代码是完全参考opencv中自带的源代码,将其中很多不必要的代码已经删除。环境是opencv2413,vs2013,win10。        目录结构如图所示: ...
  • xukaiwen_2016
  • xukaiwen_2016
  • 2016年08月23日 22:11
  • 3285

opencv自带人脸检测算法对比

今天把opencv自带的几个frontface检测器做了一个效果比较 frontface检测器如下: haarcascade_frontalface_alt.xml ...
  • yangleo1987
  • yangleo1987
  • 2016年10月19日 13:41
  • 7008

【C++】基于 OpenCV 的人脸识别(强烈推荐)

一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库。它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包。根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从...
  • u013346007
  • u013346007
  • 2016年01月23日 14:18
  • 45033

opencv之人脸检测官方examp解析

#include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/...
  • hb707934728
  • hb707934728
  • 2016年08月09日 18:19
  • 1020

基于OpenCV读取摄像头进行人脸检测和人脸识别

前段时间使用OpenCV的库函数实现了人脸检测和人脸识别,笔者的实验环境为VS2010+OpenCV2.4.4,OpenCV的环境配置网上有很多,不再赘述。检测的代码网上很多,记不清楚从哪儿copy的...
  • chary8088
  • chary8088
  • 2014年05月03日 21:39
  • 52838
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV人脸检测(完整源码+思路)
举报原因:
原因补充:

(最多只允许输入30个字)