Cascade Classifier 用做人脸识别的方法及例程

本文介绍了如何使用Opencv中的Cascade Classifier进行人脸识别。作者分享了学习笔记和翻译的教程,并提供了例程链接,包括图片和.xml文件。例程不仅能够识别静态图片,还能通过摄像头实时识别。识别率达到了95%,但在遮挡情况下可能无法准确识别。
摘要由CSDN通过智能技术生成

Cascade Classifier 是Opencv中一个级联分类器,我学习Opencv的过程中,做了些笔记还有翻译了一些指导书。可供需要的人士参考,因本人学历不高。翻译中肯定要不到位、不准确的地方,还望网友们多多指点 一二,共同学习嘛!

本文的例程见以下链接:
(http://docs.opencv.org/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html)

也可以在文章的后尾下载包含图片及.xml文件的例程。例程中也可以打开摄像头执行拍照识别,只需打开即可实现摄像头拍照:

#define CAM 1

好吧,我们先看看识别出来的效果图吧。

人脸识别

这里写图片描述

我个人觉得分类中还未添加眼睛被盖住的时候未能识别出来的情况,图中画圆的头像。本次示例的图片识别率为:

(识别率=19/20x100%=95%)
还是理想状态下

代码分析:

/** Global variables */
String face_cascade_name = "lbpcascade_frontalface.xml";

//导入级联分类器xml文件,并作文件是否存在的判断
if( !face_cascade.load( face_cascade_name ) )
{ 
   printf("--(!)Error loading\n");
   return -1;
}

//-- 2. Read the video stream
      capture.open( 0 );//参数为“0”,表示打开默认的摄像机
     if( capture.isOpened() )
      {
        for(;;)
        {
           //代码段略
        }
      }

** ----------------- 主要代码 ---------- **

   //转换成灰度图
   cvtColor( frame, frame_gray, COLOR_BGR2GRAY );
   //转换直方图
   equalizeHist( frame_gray, frame_gray );

   //-- Detect faces
   face_cascade.detectMultiScale( frame_gray,                      faces,
 6,
 Size(66, 66),
 Size(300, 300) );

** ----------------- 主要函数结构 ----------- **
**CascadeClassifier::detectMultiScale**
C++下的原形: 
void CascadeClassifier::detectMultiScale(
const Mat& image, 
vector<Rect>& objects, 
double
scaleFactor=1.1, 
int minNeighbors=3,
int flags=0,
Size minSize=Size(), 
Size maxSize=Size())

参数:
Image – 原图像;
Object  – 存放检测结果的目标矩阵;
ScaleFactor – 图像衰减比例系数;
minNeighbors – 保留最小目标邻近的长方形;
flags – 仅仅用于旧版本的cascade,新版本未用到。
MinSize  - 最小的目标尺寸,小于这个尺寸将不会检测。
MaxSize – 最大的目标尺寸,大于这个尺寸将不会被检测。

**VideoCapture::open**
C++:有两个原行:
 bool VideoCapture::open(const string& filename)
 bool VideoCapture::open(int device)
参数:
filename - - 打开视频或图片文件的名称,例如video.avi 、img_001.jpg
device - - 设备名称,如:a camera index。Device=0,表示打开默认摄像设备。

**VideoCapture::isOpened**
isopened() - - 调用时返回一个已经初始化好的的设备,正确返回1 ,错误返回非零。
**VideoCapture::release**
release() 关闭并释放设备


**Ellipse**
C++: 原型1void ellipse(
Mat& img, 
Point center,
Size axes, 
double angle, 
double startAngle, 
double endAngle,
const Scalar& color, 
int thickness=1, 
int lineType=8, 
int shift=0)

C++: 原型2void ellipse(
Mat& img, 
const RotatedRect& box, 
const Scalar& color, 
int thickness=1, 
int line-Type=8)

Img - - 图像
Center – 中心点
Axes - - 半径
Angle - - 中心角度
startAngle - - 起始角度
endAngle - - 终点角度
color - - 颜色
thickness - - 厚度
linetype - - 线型


例程及图片下载地址
下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值