opencv 实现人脸检测(harr特征)

我这里用的是已经训练好的haar级联分类器。
眼睛检测 haarcascade_eye_tree_eyeglasses.xml
人脸检测 haarcascade_frontalface_alt2.xml
检测思路:
先把图片转为灰度,接着将图片直方均匀化,在上面处理后的图片矩阵中检测脸的区域,然后把脸这一块圈出来去检测眼睛。
检测函数代码如下:
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
void DetectFace(Mat, Mat);
CascadeClassifier faceCascade;
CascadeClassifier eyes_Cascade;
int main(int argc, char** argv) {
VideoCapture cap;
if (!cap.open(0)) {
cout << "摄像头打开失败!!" << endl;
return -1;
}
if (!faceCascade.load("E:\\VS2015Opencv\\opencv3.2\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt2.xml")) {
cout << "人脸检测级联分类器没找到!!" << endl;
return -1;
}
if (!eyes_Cascade.load("E:\\VS2015Opencv\\opencv3.2\\opencv\\build\\etc\\haarcascades\\haarcascade_eye_tree_eyeglasses.xml")) {
cout << "眼睛检测级联分类器没找到!!" << endl;
return -1;
}
Mat img, imgGray;
int fps = 60;
while (true) {
cap >> img;
cvtColor(img, imgGray, CV_BGR2GRAY);
equalizeHist(imgGray, imgGray);//直方图均匀化
DetectFace(img, imgGray);
waitKey(1000 / fps);
}
return 0;
} void DetectFace(Mat img, Mat imgGray) {
namedWindow("src", WINDOW_AUTOSIZE);
vector<Rect> faces, eyes;
faceCascade.detectMultiScale(imgGray, faces, 1.2, 5, 0, Size(30, 30));
for (auto b : faces) {
cout << "输出一张人脸位置:(x,y):" << "(" << b.x << "," << b.y << ") , (width,height):(" << b.width << "," << b.height << ")" << endl;
}
if (faces.size()>0) {
for (size_t i = 0; i<faces.size(); i++) {
putText(img, "ugly girl!", cvPoint(faces[i].x, faces[i].y - 10), FONT_HERSHEY_PLAIN, 2.0, Scalar(0, 0, 255)); rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), Scalar(0, 0, 255), 1, 8);
cout << faces[i] << endl;
//将人脸从灰度图中抠出来
Mat face_ = imgGray(faces[i]);
eyes_Cascade.detectMultiScale(face_, eyes, 1.2, 2, 0, Size(30, 30));
for (size_t j = 0; j < eyes.size(); j++) {
Point eye_center(faces[i].x + eyes[j].x + eyes[j].width / 2, faces[i].y + eyes[j].y + eyes[j].height / 2);
int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
circle(img, eye_center, radius, Scalar(65, 105, 255), 4, 8, 0);
}
}
}
imshow("src", img);
}
opencv 实现人脸检测(harr特征)的更多相关文章
- 【转载】opencv实现人脸检测
全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...
- OpenCV实现人脸检测
OpenCV实现人脸检测(转载) 原文链接:https://www.cnblogs.com/mengdd/archive/2012/08/01/2619043.html 本文介绍最基本的用OpenC ...
- OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现
# OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...
- OpenCV&Qt学习之四——OpenCV 实现人脸检测与相关知识整理
开发配置 OpenCV的例程中已经带有了人脸检测的例程,位置在:OpenCV\samples\facedetect.cpp文件,OpenCV的安装与这个例子的测试可以参考我之前的博文Linux 下编译 ...
- OpenCV + Python 人脸检测
必备知识 Haar-like opencv api 读取图片 灰度转换 画图 显示图像 获取人脸识别训练数据 探测人脸 处理人脸探测的结果 实例 图片素材 人脸检测代码 人脸检测结果 总结 下午的时候 ...
- python中使用Opencv进行人脸检测
这两天学习了人脸识别,看了学长写的代码,边看边码边理解搞完了一边,再又是自己靠着理解和记忆硬码了一边,感觉还是很生疏,就只能来写个随笔加深一下印象了. 关于人脸识别,首先需要了解的是级联分类器Casc ...
- 基于Opencv的人脸检测及识别
一.实验目的:我这里完成的是,将8张人脸图片(4组,每组两张)存入库中,选取1张图片,程序识别出与其匹配的另一张. 这里介绍分三个步骤完成该工作,①程序读取摄像头.拍照 ②程序从电脑文档中读取图片 ...
- opencv 摄像头人脸检测
PYTHON ubuntu16.04 默认安装的Python版本2.7.12,当用pip install opencv-python 安装了opencv for python 3.3.0.10后,运行 ...
- 利用html5、websocket和opencv实现人脸检测
最近学习人脸识别相关的东西,在MFC下使用OpenCV做了一个简单的应用.训练需要较多的数据,windows应用程序终究还是不方便,于是想着做成CS模式:检测识别都放在服务器端,视频获取和显示都放在网 ...
随机推荐
- 二次剩余的判定及Cipolla算法
二次剩余 ppp是奇素数.所有的运算都是在群Zp∗Z_{p}^{*}Zp∗中的运算.方程x2=a≠0x^2=a \neq 0x2=a̸=0问是否有解,以及解是什么?若有解,aaa就是模ppp的二次 ...
- 牛客练习赛56 E 小雀和他的王国
题目链接:https://ac.nowcoder.com/acm/contest/3566/E 思路:tarjan缩点,桥重建图,dfs跑树的直径. #include <iostream> ...
- 剑指offer-面试题40-最下的k个数-快速排序
/* 题目: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. */ /* 思路: 快速排序,找到第k+1大的数,其左边则为最 ...
- 通俗易懂的RESTful API实践详解(含代码)
来源:点击进入 点击上方链接,版面更好 一.什么是RESTful REST 是面向资源的,这个概念非常重要,而资源是通过 URI 进行暴露,URI 的设计只要负责把资源通过合理方式暴露出来就可以了,对 ...
- 【终端使用】用户权限和"chmod"命令的简单使用
一.用户权限知识点 1.1.基本概念 用户是Linux系统工作中重要的一环,用户管理包括 用户管理 和 组管理. 在Linux系统中,不论由本机登录系统 或者 远程登录系统,每个系统都必须拥有一个账号 ...
- 使用INF创建CSR文件
公司要为一个英国的客户提供由HTTP升级到HTTPS的服务,于是接触到了申请SSL证书这方面的内容. 一.总的来说,申请证书需要两步,一是创建CSR文件,二是在证书提供商购买证书并将CSR文件发给证书 ...
- git提交时忽略了dll
问题说明 突然出现torisegit会自动忽略*.dll文件不会提交,比如:CSharp.dll. 问题原因 原因是由于安装了Sourcetree,受到了其环境变量的影响. Windows系统 ...
- 嵊州D6T2 城市 city
城市 city [问题描述] 众所周知,why 是czyz 王国的国王. czyz 王国一共有n 个城市,每个城市都有一条道路连向一个城市(可能连向这个城市自己). 同时,对于每一个城市,也只有一条道 ...
- ASP.NET MVC5----数据注解和验证
在使用MVC模式进行开发时,数据注解是经常使用的(模型之上操作),下面是我看书整理的一些常见的用法. 什么是验证,数据注解 验证 从全局来看,发现逻辑仅是整个验证的很小的一部分.验证首先需要管理用户友 ...
- u盘变成Read-only file system
先查看U盘的设备号,然后修改后重新挂载 fdisk -l sudo dosfsck -v -a /dev/sdb4