如何使用opencv中的adboost算法训练分类器
需要的工具
- opencv视觉库
- vs开发环境
步骤
1. 正负样本的选取
2. 样本描述文件的创建
使用dos命令和opencv中的createSamples程序创建样本描述文件
正样本描述文件的创建
1. 使用命令将当前目录切换到正样本图片的目录 2. 输入dir /b > pos.txt,此时目录中生成一个pos.txt文件,打开pos.txt文件,删除最后一行保存文件 3. 一个证样本描述文件需要包含文件名,正样本在图片中的数目,位置和大小,具体格式如下faces/00.bmp 1 0 0 20 20。因此,需要打开刚刚生成的pos.txt文件,使用查找替换功能,将‘bmp’替换成‘bmp 1 0 0 20 20’ 4. 因为在使用opencv中opencv haartraining 程序训练时输入的正样本是vec文件,所以需要使用opencv中的opencv createsample程序生成pos.vec证样本描述文件 opencv haartraining 程序和opencv createsample程序opencv安装目录的bin文件目录下可以找到,找到后复制到当前目录下 5. 复制到当前目录下之后,在dos命令窗口下运行命令‘opencv_createsamples.exe -info pos.txt -vec pos.vec -num 2706 -w 20 -h 20’即可生成pos.vec正样本描述文件 1. 出现应用程序错误:应用程序无法正常启动(0xc000007b),请单击“确定”关闭应用程序 原因:x86程序在x64下运行 解决方案:用X64程序运行 2. opencv error:unknown error code -9 <> in cvSetImageROI 原因:找不到图片 解决方案:将图片文件夹往上一级目录提
负样本描述文件的创建
只需生成neg.txt文件即可,执行2.1.1和2.1.2两步
训练分类器
1. 使用命令‘opencv_haartraining.exe -data cascade -vec pos.vec -bg neg.txt -sym -npos 2706 -nneg 4300 -mem 2000 -mode ALL -w 20 -h 20’
1. opencv error:assertion failed <elements_read == 1> in icvGetHaarTraininDataFromVecCallback
原因:每个强分类器训练过程中都会从剩下的countvec中抽样,每次训练完一个强分类器之后,都会从总样本中剔除,一直进行nstage次,如果npos设置与vec中总样本数相同时,第二个强分类器训练时必然会报错,提示样本数不足
解决方案:npos与nneg设置小一点即可