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++: 原型1:
void 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++: 原型2:
void 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 - - 线型
例程及图片下载地址
下载地址