Chinaunix首页 | 论坛 | 博客
  • 博客访问: 669152
  • 博文数量: 207
  • 博客积分: 1743
  • 博客等级: 上尉
  • 技术积分: 2044
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-20 14:36
文章分类

全部博文(207)

文章存档

2016年(24)

2015年(10)

2014年(50)

2013年(45)

2012年(78)

分类: LINUX

2015-06-18 15:42:14

【原】训练自己的haar-like特征分类器并识别物体(3)

在前两篇文章中,我介绍了《训练自己的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;
}
detect_and_draw

===================================

其实上面的代码可以运用于大部分模式识别问题,无论是自己生成的xml文件还是opencv自带的xml文件。在opencv的工程目录opencv\data文件夹下有大量的xml文件,这些都是opencv开源项目中的程序员们自己训练出来的。然而,效果一般不会合你预期,所以才有了本系列文章。天下没有免费的午餐,想要获得更高的查准率与查全率,不付出点努力是不行的!

 

阅读(1620) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~