【使用方法】主要是在cmd中使用命令行操做。打开文件夹D:\opencv349\x64\vc12\bin,能够看到这三个exe文件。按住键盘shift+鼠标右键,在此处打开Powershell窗口。具体命令见黄色背景。html
【样本】框选缺陷的尺寸比例与opencv_createsamples.exe(生成vec)的w、h比例一致(会自动缩放到指定的w、h)。负样本尺寸≥w、h。git
【功能】github
以检测缺陷为例(目录见下图)。三个工具依次为:标注缺陷——生成正样本的vec文件——训练样本。shell
opencv_annotation.exe,用来标注缺陷,完成后获得txt文件,内容以下。框选时框住缺陷便可。工具
opencv_createsamples.exe,生成vec文件。此工具能够把框选的缺陷缩放到指定大小(默认24*24像素,注意负样本尺寸≥此像素),即所谓的归一化。测试
opencv_traincascade.exe,生成cascade.xml,保存了训练获得的模型参数,此文件用于测试。spa
【用法】.net
一、opencv_annotation.exe命令行
若图片过大,不建议使用此工具来标注,不方便放大或缩小。通常用于小于屏幕尺寸的图片。3d
若是图片统一是等大的纯缺陷图(如20*20像素),那么能够不用此工具,直接仿照上图在txt中添加内容便可(参考小技巧),个数、坐标统一 1 0 0 20 20。
超过屏幕尺寸的大图标注,能够用https://github.com/tzutalin/labelImg/releases,获得xml文件中的坐标须要本身计算宽高,仿照上图格式保存到txt中。
-a,生成的txt的路径及txt名。-i,缺陷图片的路径。若是图片高度>指定的m值,则缩小r倍显示。
cmd中输入:opencv_annotation -a=D:\data\NgImages\info.txt -i=D:\data\NgImages\
以后会遍历展现D:\data\NgImages\中的缺陷图,鼠标左键框选缺陷后,按键盘c键确认此框,d键放弃此框,n键下一幅图,esc键退出。
完成后坐标结果会保存到info.txt中(注意txt与图片在同一文件夹中)。
二、opencv_createsamples.exe
删除info.txt中D:\data\NgImages\,由于 -info D:\data\NgImages\info.txt中D:\data\NgImages\会补全图片路径。
cmd中输入:opencv_createsamples -info D:\data\NgImages\info.txt -vec D:\data\ng.vec
依据正样本info.txt中坐标索引到真正框选的缺陷图,将其特征编译为二进制文件ng.vec
经常使用参数说明:注意-info -vec这两个参数设置后,-bg失效,因此此处不列出。
-info 上一步中获得的info.txt的路径;
-vec 生成vec文件的路径、vec文件名;
-num 生成的正样本的最大数目,默认1000。若正样本图片数>设定值,则只生成设定值个正样本,不然生成实际个数个。
-w 正样本缩放到的宽度,默认24像素
-h 正样本缩放到的高度,默认24像素
三、opencv_traincascade.exe
此处会用到负样本。在负样本图片所在目录新建okInfo.txt,内容是全部负样本图片名(不带路径),如1.jpg等(若是提示错误,就把绝对路径加上如D:\data\background\1.jpg)。
opencv_traincascade -data D:\data\ -vec D:\data\ng.vec -bg D:\data\OkImages\okInfo.txt -numStages 25 -numPos 30 -numNeg 200 -umStaes 25 -w 24 -h 24 -minHitRate 0.995 -maxFalseAlarmRate 0.5 -mode ALL
注意-w 24 -h 24与第2步骤的尺寸要一致,-numPos用于训练每层的正样本数<opencv_createsamples.exe获得的正样本数,-numNeg无要求,参数含义再也不赘述。
最终获得训练好的级联分类器的最终参数文件cascade.xml,此文件可用于测试。