OpenCV人脸检測(完整源代码+思路)
本博文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,那么就分享他把. openCv就不介绍了,说下人脸检測.事实上是通过openCv里边已经训练好的xml ...
- 【从零学习openCV】IOS7下的人脸检測
前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...
- Matlab人脸检測方法(Face Parts Detection)具体解释
今天同学让我帮忙制作一个人脸表情识别的样本库,当中主要是对人脸进行裁剪,这里用到了一个相对较新的Matlab人脸检測方法Face Parts Detection.网上百度了一下发现关于Matlab人脸 ...
- 利用opencv中的级联分类器进行人脸检測-opencv学习(1)
OpenCV支持的目标检測的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification).注意,新版本号的C++接口除了Haar特征以外 ...
- 基于QT和OpenCV的人脸检測识别系统(1)
人脸识别分为两大步骤 1.人脸检測 这个是首要实现的.你得实现人脸显示的时候把人脸框出来,当然算法非常多,另一些人眼检測鼻子检測什么的 主要用的是这个 const char *faceCascadeF ...
- Viola-Jones人脸检測
OpenCV中有一个基于树的技术:Haar分类器,它建立了boost筛选式级联. 它能够识别出人脸和其它刚性物体. 对于检測"基本刚性"的物体(脸,汽车,自行车,人体等)这类识别任 ...
- OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检測的測试代码
Tadas Baltrusaitis的OpenFace是一个开源的面部行为分析工具.它的源代码能够从 https://github.com/TadasBaltrusaitis/OpenFace 下载. ...
- C++开发人脸性别识别教程(10)——加入图片的人脸检測程序
现在我们的MFC框架已经初具规模,能够读取并显示目录下的图片.在这篇博文中我们将向当中加入人脸检測的程序. 一.人脸检測算法 这里我们使用OpenCv封装的Adaboost方法来进行人脸检測,參见:C ...
- 【OpenCV新手教程之十二】OpenCV边缘检測:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...
随机推荐
- 今日SGU 5.20
SGU 404 题意:.. 收获:取模 #include<bits/stdc++.h> #define de(x) cout<<#x<<"="& ...
- 页面打开pdf格式文件的方法
<embed width=500 height=300 fullscreen=yes src="1.pdf" />
- AVEVA PDMS 三维文字工具
AVEVA PDMS 三维文字工具 eryar@163.com 网上有个文字工具插件,可以在PDMS中创建三维的字母和数字,且字体样式只有一种,其下载地址为:http://www.plantcon.d ...
- 【LeetCode-面试算法经典-Java实现】【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】
[121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Say you have ...
- 一次失败的PHP扩展开发之旅
一次失败的PHP扩展开发之旅 By warezhou 2014.11.19 缘起 经过不断的持续迭代.我们部门的协程版网络框架(CoSvrFrame)最终出炉了!这本来是件喜大普奔的事情.可是随着新业 ...
- Lua 是一个小巧的脚本语言
Redis进阶实践之七Redis和Lua初步整合使用 一.引言 Redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运 ...
- 如何才能正确的关闭Socket连接
从TCP协议角度来看,一个已建立的TCP连接有两种关闭方式,一种是正常关闭,即四次挥手关闭连接:还有一种则是异常关闭,我们通常称之为连接重置(RESET).首先说一下正常关闭时四次挥手的状态变迁,关闭 ...
- onvif开发总结
ONVIF开发经验总结 ONVIF开发经验总结............................................................................. ...
- 6.Maven之(六)setting.xml配置文件详解
转自:https://blog.csdn.net/u012152619/article/details/51485152
- 搜寻Linux软件实用指南
搜寻Linux软件实用指南 对于初学者来说,仅仅安装好Linux系统还是不够的,还需要安装大量的应用软件.许多下载网站都提供了诸如装机必备软件的下载,分门别类提供经典的工具软件下载.本文主要针对初学 ...