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. (原创)白话KMP算法详解

    引子:BF暴力算法 KMP算法知名度相当高,燃鹅其理解难度以及代码实现对于初学数据结构和算法的同学并不友好,经过两天的总结,详细总结KMP算法如下: 初学串的模式匹配时,我们都会接触到,或者说应该能想 ...

  2. Cassandra 类型转换限制

    原文地址:http://stackoverflow.com/questions/31880381/cassandra-alter-column-type-which-types-are-compati ...

  3. c++远征

    ---恢复内容开始--- 这两天初步接触了C++,抱着一种对这两个加号的理解的心态走进这门语言的学习. 1.mooc--慕课网c++课程链接:http://www.imooc.com/learn/34 ...

  4. holoeverywhere修改actionbar背景

    <style name="Holo.Theme.Light.MyActionBar" parent="Holo.Base.Theme.Light.DarkActio ...

  5. 团队作业7——第二次项目冲刺(Beta版本)-第二篇

    1.工作分工: 团队成员 分工 郭达22120 项目整合,后台代码 刘德培44060 数据库模块 石浩洋22061 前台界面优化 曾繁钦22056 前台界面优化.测试 孙斌22030 后台代码 2.燃 ...

  6. lintcode-11-二叉查找树中搜索区间

    二叉查找树中搜索区间 给定两个值 k1 和 k2(k1 < k2)和一个二叉查找树的根节点.找到树中所有值在 k1 到 k2 范围内的节点.即打印所有x (k1 <= x <= k2 ...

  7. php mongodb扩展 其他扩展也类似

    MongoDBPHP 扩展 本教程将向大家介绍如何在Linux.window.Mac平台上安装MongoDB扩展. Linux上安装 MongoDB PHP扩展 在终端上安装 你可以在linux中执行 ...

  8. Jmeter系列-自动生成html报告

    从JMeter 3.0开始已支持自动生成动态报告,我们可以更容易根据生成的报告来完成我们的性能测试报告. 如何生成html测试报告 如果未生成结果文件(.jtl),可运行如下命令生成报告: jmete ...

  9. Jenkins系列-Jenkins邮件通知

    一.安装邮件插件 由于Jenkins自带的邮件功能比较鸡肋,因此这里推荐安装专门的邮件插件,不过下面也会顺带介绍如何配置Jenkins自带的邮件功能作用. 可以通过系统管理→管理插件→可选插件,选择E ...

  10. (转)linux IO 内核参数调优 之 参数调节和场景分析

    1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总结可知cached中的脏数据满足如下几个条件中一个或者多个的时 ...