全部博文(207)
分类: LINUX
2015-06-18 15:42:14
在前两篇文章中,我介绍了《训练自己的haar-like特征分类器并识别物体》的前三个步骤:
1.准备训练样本图片,包括正例及反例样本
2.生成样本描述文件
3.训练样本
4.目标识别
==============
本文将着重说明最后一个阶段——目标识别,也即利用前面训练出来的分类器文件(.xml文件)对图片中的物体进行识别,并在图中框出在该物体。由于逻辑比较简单,这里直接上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
int _tmain( int argc, _TCHAR* argv[])
{
char *cascade_name = CASCADE_HEAD_MY; //上文最终生成的xml文件命名为"CASCADE_HEAD_MY.xml"
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); //加载xml文件
if ( !cascade )
{
fprintf ( stderr, "ERROR: Could not load classifier cascade\n" );
system ( "pause" );
return -1;
}
storage = cvCreateMemStorage(0);
cvNamedWindow( "face" , 1 );
const char * filename = "(12).bmp" ;
IplImage* image = cvLoadImage( filename, 1 );
if ( image )
{
detect_and_draw( image ); //函数见下方
cvWaitKey(0);
cvReleaseImage( &image );
}
cvDestroyWindow( "result" );
return 0;
}
|
===================================
其实上面的代码可以运用于大部分模式识别问题,无论是自己生成的xml文件还是opencv自带的xml文件。在opencv的工程目录opencv\data文件夹下有大量的xml文件,这些都是opencv开源项目中的程序员们自己训练出来的。然而,效果一般不会合你预期,所以才有了本系列文章。天下没有免费的午餐,想要获得更高的查准率与查全率,不付出点努力是不行的!