opencv学习---打开摄像头检测个人头像
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学习---打开摄像头检测个人头像的更多相关文章
- 如何使用 OpenCV 打开摄像头获取图像数据?
OpenCV 如何打开摄像头获取图像数据? 代码运行环境:Qt 5.9.1 msvc2015 32bit OpenCV 3.3.0 #include "include/opencv2/ope ...
- OpenCV学习记录(一):使用haar分类器进行人脸识别 标签: opencv脸部识别c++ 2017-07-03 15:59 26人阅读
OpenCV支持的目标检测的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification).OpenCV2之后的C++接口除了Haar特征 ...
- OpenCV 学习笔记 05 人脸检测和识别
本节将介绍 Haar 级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 本章将考虑如何将多个 Haar 级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人脸) ...
- OpenCV学习 4:摄像头视频读写与边缘检测
原创文章,欢迎转载,转载请注明出处 想实现人脸识别,车辆识别,车牌识别.一般我们可不是读硬盘里面的视频文件的,都是直接从摄像头读取视频流然后直接识别的.所以读取摄像头的视频流这是基础...OpenCV ...
- OpenCV学习1-----打开摄像头并在画面上添加水印
一直对视频或者图像添加水印很感兴趣,查找资料后用OpenCV尝试了一下. 记录下来. 1.首先是打开摄像头. 找到OpenCV官方文档给出的例子. 例子中实现的是,打开摄像头,并对画面进行高斯滤波,使 ...
- 项目实战:Qt+Ffmpeg+OpenCV相机程序(打开摄像头、支持多种摄像头、分辨率调整、翻转、旋转、亮度调整、拍照、录像、回放图片、回放录像)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- OpenCV Open Camera 打开摄像头
这是一个用OpenCV2.4.10打开摄像头的一个例子,参见代码如下: #include <iostream> #include <stdio.h> #include < ...
- OpenCV x64 vs2010 下打开摄像头录制视频写成avi(代码为转载)
首先参照下面这里进行opencv x64位机器下面的配置 http://wiki.opencv.org.cn/index.php/VC_2010%E4%B8%8B%E5%AE%89%E8%A3%85O ...
- OpenCV 学习笔记 07 目标检测与识别
目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...
随机推荐
- 【Random】-随机数字-jmeter
参数化 Random 参数化,存储结果的变量名,名字写了,就可以给其它请求使用
- 数据库Mysql的学习(八)-储存过程和事务和导入导出
储存过程 DELIMITER // CREATE PROCEDURE pro1() BEGIN SELECT book_id,book_name,category FROM bookinfo t1 J ...
- gitolite 丢失管理密钥/访问权限 解决办法
登录到服务器. 使用完整路径克隆管理员仓库: git clone $HOME/repositories/gitolite-admin.git temp cd gitolite-admin/conf v ...
- HTML/JSP中一些单书名号标签的用途<%-- --%><!-- --><%@ %><%! %><% %><%= %>
注释 <%-- --%>是(JSP)隐式注释,不会在页面显示的注释 <!-- -->是(Html)显示注释,会在JSP页面显示 关于注释还有单行隐式注释//和多行隐式注释/* ...
- 统计单词数:string函数使用
题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...
- Halcon和visionPro的比较
很多朋友会问到visionpro和halcon这两款机器视觉软件,到底学哪个好呢,今天重码网就给大家讲一讲: 首先比较下两者的优缺点: halcon: 提供的图像算法要比Visionpro多,也就是说 ...
- 脚本 script 常用脚本
目录 remove_all_pyc find_all_links rename_with_slice load_json_without_dupes execution_time benchmark_ ...
- php 连接redis查询数据
class Layoutdemo{ function index(){ $db = new Db(); $id=390; $layout_json = array(); if($info = $db- ...
- java---迭代器(Iterator)
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为“轻量级”对象,因为创建它的代价小. Java中的Iterator功能比较简单, ...
- lol人物模型提取(一)
前段时间去青岛搞团建去了,闲来无事逛了会儿淘宝,无想买个lol手办,意之间发现了这张店铺宣传图: 哎呀我去,这模型做得挺逼真啊,然而这家店铺是卖zoe的cosplay道具的,不是手办-_-|| ...