opencv_traincascade的使用学习

Opencv自带了两种应用:opencv_haartraing和opencv_traincascade。两者的不同之处就是后者支持haar和lbp两种特征,而前者只支持haar。

现在只考虑opencv的opencv_traincascade,其实现过程包括两个主要步骤:

(1) 正负样本训练集的生成;

(2) 分类器模型的训练。

第一步:

正负样本训练集的生成。所谓的正样本对应含有检测目标的图像;而负样本是不含有目标对象的任意图像。所谓的任意,并非绝对的肆意。我们需要遵从:负样本是实际应用中干扰我们目标检测的相关对象,例如,检测车辆,我们便应把不包括车辆的马路作为负样本集。

为了应用opencv_traincascade.exe,便需要我们按照其要求的方式和法则去组织数据。

训练集样本的组织方式:

在E盘新建一个文件夹boost,里面放如图所示的文件夹和.exe文件:

opencv_traincascade的使用学习_第1张图片

说明:文件夹neg用于存放负样本;文件夹pos用于存放负样本;dt用于存放训练的模型。

1)      Negtive Samples的生成方法

文件夹neg里面应当放入负样本图像,同时在其中必须生成一个negfilenames.txt的文本文档,在这个文本文档里面存放的是图像文件的名称。

怎样生成negfilenames.txt呢?

打开cmd窗口,输入以下内容:

opencv_traincascade的使用学习_第2张图片

现在,在neg文件夹里便多了一个negfilenames.txt,打开该文档,你会发现里面每一行对应一幅neg文件夹里的图像,但是最后一行就不是了(记得将这一行删除)。

2)Postive  Samples的生成方式

正样本需要通过opencv_createsamples.exe生成。

在文件夹pos里面放入的正样本图像可以是两种形式的图像:

a> 图像里面只含有单一的检测目标对象;

b> 预先已标记好的目标对象的全图。

这里采用的是预先标记的目标对象的全图,这样的话,我们便需要在文件夹里生成一个info.dat的文件。

怎样生成info.dat?

里面内容如下所示:

opencv_traincascade的使用学习_第3张图片

每一行对应一个图像的信息,这些信息是:

图像名称目标对象个数 目标对象1的左上x坐标 目标对象1的左上y坐标 目标对象1宽度 目标对象1高度目标对象2的左上x坐标 目标对象2的左上y坐标 目标对象2宽度 目标对象2高度 ……(多个目标依次该处坐标信息)

怎样生成,用C++写一个,相信自己可以的。

由于训练模型的时候必须输入正样本的vec文件,所以需要用createsamples.exe将正样本转化成vec文件,实现方式如下:

opencv_traincascade的使用学习_第4张图片

Createsameples程序命令行参数参考file:///D:/opencv243/opencv/doc/haartraining.html

这样训练集已经按照特定的方式,组织完成,可以开始进行训练了。

第二步:

模型的训练,实现方法:

很多参数都取了默认值,想要明白每个参数的意义查看你安装的opencv的doc文件夹下的opencv_user.pdf文档,这个文档通俗易懂,很好理解。

opencv_traincascade的使用学习_第5张图片

最后在dt文件夹生成了相应的训练模型:

opencv_traincascade的使用学习_第6张图片

参考:

http://blog.csdn.net/carson2005/article/details/8171571

http://jingyan.baidu.com/article/4dc40848f50689c8d946f197.html

http://blog.csdn.net/lixue20141529/article/details/46407939

http://ju.outofmemory.cn/entry/187528

http://blog.csdn.net/wuxiaoyao12/article/details/39227189

你可能感兴趣的:(opencv学习)