【计算机视觉】Opencv中的Face Detection using Haar Cascades
【计算机视觉】Opencv中的Face Detection using Haar Cascades
标签(空格分隔): 【图像处理】
声明:引用请注明出处http://blog.csdn.net/lg1259156776/
五种典型的haar-like特征,为何能用来检测人脸,人眼呢?

它给出的一个经验之谈是
1. the region of the eyes is often darker than the region of the nose and cheeks
2. the eyes are darker than the bridge of the nose
但是这样的window在别的地方特征就不明显了,那么如何从160000+的features中选择最好的特征呢:它说采用Adaboost。
We select the features with minimum error rate, which means they are the features that best classifies the face and non-face images.
其实就是adaboost的过程,选择最小错误率的特征,实际上是提高错分图像的权重,然后再进行classification,然后计算新的错误率和新的权重,一直到达到精度或者需要的特征数量足够为止。
所以,最终的分类器实际上是这些弱分类器的加权和,之所以被称之为weak,说的就是它们单独工作可能不能分类,但是一起可以组成较强的分类器。论文中说,甚至200个特征就可以达到95%的精度。
它们最后建立了6000个特征,但是考虑到图像的大部分区域都不是人脸,所以最好还是用一个简单的方法判断是不是人来你,如果不是就直接扔掉,不再对该window进行后续的处理。这样就可以进一步的降低时间消耗。
这种思想真是值得借鉴,因为有点类似TLD中的方差分类器,方差分类器的作用就是通过快速的第一步淘汰掉一半的样本,然后使得进入后续分类器的样本数量减少,有助于提高速率。
利用haar-cascade detection,opencv中可以直接从xml文件中导入训练好的参数,并先进行人脸检测,然后在人脸位置开窗,检测人眼。就这样easy:
import numpy as np
2 import cv2
3
4 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
5 eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
6
7 img = cv2.imread('sachin.jpg')
8 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
1 faces = face_cascade.detectMultiScale(gray, 1.3, 5)
2 for (x,y,w,h) in faces:
3 cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
4 roi_gray = gray[y:y+h, x:x+w]
5 roi_color = img[y:y+h, x:x+w]
6 eyes = eye_cascade.detectMultiScale(roi_gray)
7 for (ex,ey,ew,eh) in eyes:
8 cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
9
10 cv2.imshow('img',img)
11 cv2.waitKey(0)
12 cv2.destroyAllWindows()

2015-11-05 调试记录 张朋艺
【计算机视觉】Opencv中的Face Detection using Haar Cascades的更多相关文章
- Object Detection: Face Detection using Haar Cascades
目录 利用基于Haar特征的级联分类器实现人脸检测:官方教程 目标 学习基于Haar特征的级联分类器(Cascade Callifiers)实现人脸检测: 扩展到人眼检测: 基础知识 Paul V ...
- 对OpenCV中Haar特征CvHaarClassifierCascade等结构理解
首先说一下这个级联分类器,OpenCV中级联分类器是根据VJ 04年的那篇论文(Robust Real-Time Face Detection)编写的,查看那篇论文,知道构建分类器的步骤如下: 1.根 ...
- 【计算机视觉】关于OpenCV中GPU配置编译的相关事项
[计算机视觉]关于OpenCV中GPU配置编译的相关事项 标签(空格分隔): [计算机视觉] 前一段发现了OpenCV中关于GPU以及opencl的相关知识,打算升级一下对OpenCV的使用,但是发现 ...
- 【计算机视觉】【并行计算与CUDA开发】OpenCV中GPU模块使用
CUDA基本使用方法 在介绍OpenCV中GPU模块使用之前,先回顾下CUDA的一般使用方法,其基本步骤如下: 1.主机代码执行:2.传输数据到GPU:3.确定grid,block大小: 4.调用内核 ...
- Opencv中integral计算积分图
Paul Viola和Michael Jones在2001年首次将积分图应用在图像特征提取上,在他们的论文"Rapid Object Detection using a Boosted Ca ...
- opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...
- openCV中IplImage的使用
http://blog.csdn.net/welcome_xu/article/details/7650680 IplImage结构详细分析 IplImage 结构解读: typedef stru ...
- 图像金字塔及其在 OpenCV 中的应用范例(下)
前言 本文将主要讲解如何使用 OpenCV 实现图像分割,这也是图像金字塔在 OpenCV 中的一个重要应用. 关于图像分割 在计算机视觉领域,图像分割(Segmentation)指的是将数字图像细分 ...
- 立体视觉-opencv中立体匹配相关代码
三种匹配算法比较 BM算法: 该算法代码: view plaincopy to clipboardprint? CvStereoBMState *BMState = cvCreateStereoBMS ...
随机推荐
- Strategic game POJ - 1463 【最小点覆盖集】
Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solu ...
- linux下文件传输一些方法整理.
ftp类 ftp 命令已经不推荐使用了. #基本用法 lftp sftp://[domain name] lftp sftp://theURL.org #使用不同用户名 lftp sftp://[us ...
- 注解之@RequestParam和@GetMapping
@RequestParam用来处理Content-Type 为 application/x-www-form-urlencoded编码的内容,将请求参数名映射到方法参数名.在Http协议中,如果不指定 ...
- Gym - 100199C
Gym - 100199C 题意: 其实这么长的英文题面就是想告诉我们这个题是丢手绢. 解法: 找到与 $ N $ 互质的最大整数 $ K $ 即可.当 $ N $ 为奇数时, $ \frac{N-1 ...
- oracle查找表索引信息
select owner,index_name,index_type from all_indexes where owner='xxxx' and table_name='xxx' select * ...
- Chisel-LLDB命令插件,让调试更Easy
http://blog.cnbluebox.com/blog/2015/03/05/chisel/ LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器.LLDB 绑定在 ...
- 字符串匹配(KMP&BF)
字符串匹配 题目描述 设计一个程序,从一个主字符串中查找一个子字符串在主串中第一次出现的位置.主串和子串的长度不超过100.如果找不到,则输出-1. 程序输入说明 第一行输入一个整数N,说明需要进 ...
- CLR 虚方法调用和接口方法调用
不知接口方法和虚方法分发有什么区别?似乎在CIL中都是callvirt指令. 对,MSIL里都是callvirt,但JIT的时候得到了不同的处理:对虚方法的分发是编译成这样: mov ecx, es ...
- DataFactory生产身份证号码==
生产身份证号:定义数据类型为CHAR()类型的才能进行数据的组合
- Swift 析构过程
在一个类的实例被释放之前,析构函数被立即调用.用关键字deinit来标示析构函数,类似于初始化函数用init来标示.析构函数只适用于类类型. 析构过程原理 Swift 会自动释放不再需要的实例以释放资 ...