OpenCV人脸检测(C++代码)
来源:互联网 发布:mac压缩文件 编辑:程序博客网 时间:2024/06/07 01:05
OpenCV人脸检测(C++代码)—— By wepon
这篇文章简单总结一下人脸检测的代码实现,基于OpenCV,C++版本。之所以强调C++版本是因为OpenCV有很多其他语言的接口,之前我也写过人脸检测的Python实现《Python-OpenCV人脸检测(代码)》,这篇文章则讲C++实现,其实大同小异,C++相比于Python实现代码写起来会繁琐一点,这也是语言本身决定的吧。
为了保持代码风格一致,C++实现与之前的Python实现一样,都将人脸检测、眼睛检测、框出人脸、框出眼睛、截取保存人脸各个功能封装为函数,方便移植。
1、OpenCV中人脸检测采用的算法
在安装OpenCV的路径中(window系统),我们可以发现”…\opencv\sources\data”目录下有如下三个文件夹:
这正是OpenCV采用的算法。haarcascades文件下存放的是采用Haar特征的级联分类器(Cascade Classfier),hogcascades下存放采用HOG特征(梯度方向直方图)的级联分类器,lbpcascades下存放的是采用LBP特征的级联分类器。关于图像的Haar、LBP、HOG、SIFT等特征我将写另外的博文进行总结,这里就不详细展开。图中三个文件夹下存放了很多xml文件,这些是预先训练好的特征,用于构造分类器的,有人脸检测的、眼睛检测的、smile检测的、行人检测的等等。
在这篇文章中,仅以haarcascas下的”haarcascade_frontalface_alt.xml”和”haarcascade_eye.xml”作为例子。主要代码在下文讲解,更多代码也可以到我的github获取:here。
2、代码实现
这个demo以下图为输入:
图像预处理
- 转化为灰度图
- 直方图均衡化
Mat img = imread("obama.jpg");Mat img_gray;cvtColor(img,img_gray,COLOR_BGR2GRAY );equalizeHist(img_gray,img_gray);
构造级联分类器
首先生成一个级联分类器的实例,然后用xml文件初始化该实例(调用load方法),最后调用该实例的detectMultiScale方法,作用在灰度图img_gray上,即可获取该图片中的各个人脸的坐标。detectMultiScale方法返回的是一个vector类型的容器,里面每个Rect存储的是人脸矩形的左上顶点、矩形宽度、矩形长度(x,y,width,height)。
CascadeClassifier faces_cascade;faces_cascade.load("haarcascade_frontalface_alt.xml");vector<Rect> faces;faces_cascade.detectMultiScale(img_gray,faces,1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );
框出人脸、眼睛
这部分用到的是opencv里的绘图工具,可以参考opencv文档基本绘画,这里不啰嗦。ellipse画椭圆、circle画圆形,它们的参数(比如circle的圆心半径)由级联分类器返回的Rect确定。
截取和保存人脸部分
可以根据级联分类器检测返回的Rect,获取图像的ROI,然后调用imwrite方法。
Rect roi = faces[i];imwrite(saveName,img(roi));
由于检测出的face不只一个,所以saveName需要设计一下,具体在代码文件中有注释。
- 运行结果
转载请注明来源并完整保留文中链接:http://blog.csdn.net/u012162613/article/details/44081975
- OpenCV人脸检测(C++代码)
- Python_人脸检测 (dlib库检测与opencv检测效果对比 含代码)
- openCV 人脸检测 VC2008代码
- OpenCV - 人脸检测(face detection) 代码
- OpenCV人脸检测代码分析
- 基于OpenCV的人脸检测代码
- 基于opencv的人脸检测代码
- opencv人脸检测基础代码
- Python-OpenCV人脸检测(代码)
- Python-OpenCV人脸检测(代码)
- Python-OpenCV人脸检测(代码)
- Python-OpenCV人脸检测(代码)
- Python-OpenCV人脸检测(代码)
- Python-OpenCV人脸检测(代码)
- OpenCV人脸检测代码分析
- Python-OpenCV人脸检测(代码)
- VC6.0+OpenCV 人脸检测的代码分析
- Gabor的用于人脸检测的OpenCV代码
- poj-2479 Maximum sum 【最大字串和】
- 关于如何让应用程序不显示在“最近应用程序”的列表中
- 2015年薪资最丰厚的5个IT职业
- js复杂table
- Docker的大坑小洼(一)
- OpenCV人脸检测(C++代码)
- 【HDFS】hdfs如何打开回收站机制trash,恢复删除的文件
- 学会怎样尊重一个程序员
- 1.1、从 C 到 C++
- HTML5初学者福利!11个在线学习网站推荐
- 12 网络与数据库编程
- 后缀数组模板
- shell入门教程(2)-变量和参数
- gFStu常用功能、分析