opencv中具有检测人体各部分的级联分类器,在opencv文件夹里面的sources/data/haarcascades里面。

这里要选择的是能够检测人体头像的还有检测眼睛的级联分类器的文件。

它们分别是:

检测头像 haarcascade_frontalface_alt.xml或者haarcascade_frontalface_alt2.xml
检测眼睛 haarcascade_eye.xml或者haarcascade_eye_tree_eyeglasses.xml

检测用的函数是:

cvHaarDetectObjects(CvArr* image,

            CvHaarClassifierCascade *cascade,

            cvMemStorage* storage,

            double scale_factor=1.1,

            int min_neighors=,

            int flags=,

            CvSize min_size=cvSize(,),

            CvSize max_size=cvSize(,)

                                );                        
 image 被检图像
cascade haar 分类器级联的内部标识形式
storage 用来存储检测到的一序列候选目标矩形框的内存区域。
可以通过cvCreateStorage(int block_size)来创建缓冲内存。
当设置block_size=0,默认分配64k的缓冲空间内存块。
 
scale_factor 在前后两次相继的扫描中,搜索窗口的比例系数。
 
min_neighbors 构成检测目标的相邻矩形的最小个数(缺省-1)。
如果组成检测目标的小矩形的个数和小于 min_neighbors-1 都会被排除。
如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
这种设定值一般用在用户自定义对检测结果的组合程序上。
 
flags 操作方式。当前唯一可以定义的操作方式是 CV_HAAR_DO_CANNY_PRUNING。
如果被设定,函数利用Canny边缘检测器来排除一
些边缘很少或者很多的图像区域,因为这样的区域一般不含被检目标。
人脸检测中通过设定阈值使用了这种方法,并因此提高了检测速度。
min_size 检测窗口的最小尺寸。
 
缺省的情况下被设为分类器训练时采用的样本尺寸(人脸检测中缺省大小是~20×20)。
 #define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include"cv.h"
#include"highgui.h"
using namespace cv;
using namespace std; IplImage* Dectimg(IplImage *getimg);
//要将这两个文件的文件路径写清楚或者把他们复制到本项目文件夹里
//检测人眼
//static char *cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
//检测人脸
static char* cascade_name = "haarcascade_frontalface_alt2.xml"; CvHaarClassifierCascade *cascade = ;
int main()
{
//用cvLoad()加载级联分类器文件
cascade = (CvHaarClassifierCascade *)cvLoad(cascade_name); //打开摄像头,读入个人录像
CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY);
//定义IplImage的指针并且初始化。
IplImage * getfile = cvQueryFrame(capture);
//命名窗口
cvNamedWindow("Result");
//循环读入帧
while ((getfile = cvQueryFrame(capture)) != NULL)
{
//每次读入图像帧后进入检测函数
IplImage *picture = Dectimg(getfile); cvShowImage("Result", picture);
//间隔时间15 us,等待输入按键,如果按键为ESC(这个键的键值为27)就退出。
if (cvWaitKey() == )break;
}
cvWaitKey();
//释放图片指针
cvReleaseImage(&getfile);
//释放读入视频帧的指针
cvReleaseCapture(&capture);
//关闭所有窗口
cvDestroyAllWindows();
return ;
} //检测图片中的目标图像,并且用矩形将目标圈出来
IplImage* Dectimg(IplImage *getimg)
{
//克隆图像
IplImage *img = cvCloneImage(getimg);
double scale = 1.2;
//缩小图像,提高检测速度
IplImage *smallimg = cvCreateImage(cvSize(img->width / scale,img->height/scale),img->depth,img->nChannels);
cvResize(img, smallimg);
//创建单通道图像
IplImage *grayimg = cvCreateImage(cvGetSize(smallimg),smallimg->depth,);
//转换成灰度图像
cvCvtColor(smallimg,grayimg,CV_RGB2GRAY);
//创建缓存
CvMemStorage *storage = ;
storage = cvCreateMemStorage();
//将图像均衡化
cvEqualizeHist(grayimg,grayimg);
cvClearMemStorage(storage);
//检测图像,将会得到目标区域的矩形
CvSeq *objects = cvHaarDetectObjects(grayimg,cascade,storage,scale,,,cvSize(,));
if (objects->total > )
{
/*
for (int i = 0; i < objects->total; i++)
{
CvPoint center;
int radius;
CvRect *rect = (CvRect*)cvGetSeqElem(objects,i);
center.x = (rect->x + rect->width / 2)*scale;
center.y = (rect->y + rect->height / 2)*scale
;
radius = cvRound((rect->width+rect->height)*0.26*scale);
cvCircle(getimg, center, radius, cvScalar(14, 45, 73), 4);
}
*/
for (int i = ; i < objects->total; i++)
{
CvRect *rect = (CvRect*)cvGetSeqElem(objects,i);
cvRectangle(getimg,
cvPoint(cvRound( rect->x*scale),cvRound( rect->y*scale)),
cvPoint(cvRound(1.2*(rect->x+rect->width)),
cvRound(1.2*(rect->y+rect->height))),
cvScalar(,,),);
}
}
else
return NULL;//如果没有检测到目标图像就返回空指针
return getimg;
}

opencv学习---打开摄像头检测个人头像的更多相关文章

  1. 如何使用 OpenCV 打开摄像头获取图像数据?

    OpenCV 如何打开摄像头获取图像数据? 代码运行环境:Qt 5.9.1 msvc2015 32bit OpenCV 3.3.0 #include "include/opencv2/ope ...

  2. OpenCV学习记录(一):使用haar分类器进行人脸识别 标签: opencv脸部识别c++ 2017-07-03 15:59 26人阅读

    OpenCV支持的目标检测的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification).OpenCV2之后的C++接口除了Haar特征 ...

  3. OpenCV 学习笔记 05 人脸检测和识别

    本节将介绍 Haar 级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 本章将考虑如何将多个  Haar 级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人脸) ...

  4. OpenCV学习 4:摄像头视频读写与边缘检测

    原创文章,欢迎转载,转载请注明出处 想实现人脸识别,车辆识别,车牌识别.一般我们可不是读硬盘里面的视频文件的,都是直接从摄像头读取视频流然后直接识别的.所以读取摄像头的视频流这是基础...OpenCV ...

  5. OpenCV学习1-----打开摄像头并在画面上添加水印

    一直对视频或者图像添加水印很感兴趣,查找资料后用OpenCV尝试了一下. 记录下来. 1.首先是打开摄像头. 找到OpenCV官方文档给出的例子. 例子中实现的是,打开摄像头,并对画面进行高斯滤波,使 ...

  6. 项目实战:Qt+Ffmpeg+OpenCV相机程序(打开摄像头、支持多种摄像头、分辨率调整、翻转、旋转、亮度调整、拍照、录像、回放图片、回放录像)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  7. OpenCV Open Camera 打开摄像头

    这是一个用OpenCV2.4.10打开摄像头的一个例子,参见代码如下: #include <iostream> #include <stdio.h> #include < ...

  8. OpenCV x64 vs2010 下打开摄像头录制视频写成avi(代码为转载)

    首先参照下面这里进行opencv x64位机器下面的配置 http://wiki.opencv.org.cn/index.php/VC_2010%E4%B8%8B%E5%AE%89%E8%A3%85O ...

  9. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

随机推荐

  1. 正则表达式 和 re 模块

    正则表达式究竟是什么? 在一些网站注册的时候需要输入手机号码,当你输入一个错误的手机号码的时候,会提示你输入的手机号码格式错误 那么他究竟是如何判断的呢? 我们用Python代码进行表示: phone ...

  2. JavaScript闭包总结

    闭包是你家庭中的第三者你在享受着第三者给你带来的便利时,而你的家庭也随时触发前所未有的危机(直男癌患者的观点);闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的常见的方式,就是在一个函数内部 ...

  3. Thunder团队第一周 - Scrum会议3

    Scrum会议3 小组名称:Thunder 项目名称:在线考试系统 Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李 ...

  4. from module import 和 import 的区别

    最近在用codecademy学python,遇到一些题目错误,小小记录一下 如from math import sqrt是把sqrt作为本文件的方法导入进来了,使用的时候只需要直接调用sqrt. 而如 ...

  5. 软工实践-Alpha 冲刺 (1/10)

    队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 学习了UI设计软件的使用,了解了项目开发的具体流程. 展示 ...

  6. 福大软工1816 · 第五次作业 - 结对作业2_map与unordered map的比较测试

    测试代码: #include <iostream> using namespace std; #include <string> #include <windows.h& ...

  7. lintcode-185-矩阵的之字型遍历

    185-矩阵的之字型遍历 给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历. 样例 对于如下矩阵: [ [1, 2, 3, 4], [5, 6, 7, 8], [9 ...

  8. Debian以及Ubuntu源设置

    在使用Debian和Ubuntu时,经常为了软件源烦恼,最近发现了一个网页,可以根据国家来设置源的地址,效果还不错. Debian:http://debgen.simplylinux.ch/ Ubun ...

  9. Linux内核策略介绍学习笔记

    主要内容 硬件 策略 CPU 进程调度.系统调用.中断 内存 内存管理 外存 文件IO 网络 协议栈 其他 时间管理 进程调度 内核的运行时间 系统启动.中断发生.系统调用以及内核线程. 进程和线程的 ...

  10. OSG学习:位置变换节点示例

    osg::PositionAttitudeTransform节点. #include <osgViewer\Viewer> #include <osg\Node> #inclu ...