利用adaboost训练人脸分类器时,主要做几件事,准备正负样本,生成正样本pos.vec文件,生成负样本列表文件,训练等,具体可以看这几个博客:
http://blog.csdn.net/u013355191/article/details/40381107,这里不赘述。
记录下我在研究过程理解的,生成正样本程序CreateSamples.exe以及训练程序opencv_haartraining.exe的所有参数的具体意义与用处。
CreateSamples.exe参数详解
这个可执行程序主要用来生成用于训练的正样本,位于\opencv\build\common目录下,老版本名字为:createsamples.exe
该程序的主函数中有四个分支:
if( imagename && vecname )
{
cvCreateTrainingSamples(
vecname,
imagename,
bgcolor,
bgthreshold,
bgfilename,
num,
invert,
maxintensitydev,
maxxangle,
maxyangle,
maxzangle,
showsamples,
width,
height );
通过传入的单张图片的扭曲变形来创建多个正样本,如果有单张传入的图像路径以及正样本vec路径,则走到这个分支:
vecname:要生成用于训练的vec文件的路径,内容为xxx/xxx/xxx/xxx.vec,例如通过 -vec xxx/xxx/xxx/xxx.vec 传入
imagename:通过一张图片的扭曲形变成多张图片的单张样本图片的路径。例如通过 -img xxx/xxx/xxx/xxx.jpg传入
bgcolor:这是创建样本时样本扭曲函数中用来决定像素是否有效的像素值,作为背景过滤的基本值将像素值在(bgcolor-bgthreshold)与(bgcolor+bgthreshold)之外的像素保留来生成正样本,因为操作的是灰度图,所以这个值0范围是~255。例如通过:-bgcolor 128传入
bgthreshold:决定背景掩码的实际取值范围,例如通过:-bgthreshold 32传入。
bgfilename:记录所有负样本的目录文件,xxx/xxx/xxx/neg.txt,例如通过:-bg xxx/xxx/xxx/neg.txt传入
num:要创建的样本的数量,例如通过:-num