opencv_createsamples的用法

原文地址:https://blog.csdn.net/sssanton/article/details/52268630

近研究OPENCV的分类器,大概试了一下自带的人脸识别例程,然后想到自己去训练其他物品识别的分类器,需要用到里面的opencv_createsamples创建样本和opencv_traincascade训练级联分类器。网上搜了不少的文章,又看了opencv官网的训练器生成教程,还是没怎么懂一些参数的意义和用法。经过自己多次的样本创建和分类器训练,加上研究opencv的源代码。大致掌握了一些细节方面的东西,故在此作笔记并分享:

一、opencv_createsamples

    看过源码才发现,这个EXE的执行原来是有几种逻辑的,当你填入的参数列表不一样时,你会得到差别很大的结果,这个在刚开始摸索的时候走了不少弯路。下面就此说一下:


    上面是opencv_createsamples的源码,根据调用的参数列表,会执行四种功能:A.从一张图像中通过扭曲形变创建多个训练样本;B.从一张图像中通过扭曲形变创建多个测试样本;C.通过描述文件的图片列表清单中创建训练样本;D.显示VEC文件中的样本图片。对应地,当指定-img -vec参数,则对应执行功能A,如果只有-img,-bg,-info参数而没有vec参数,则执行功能B,如果只有-bg和-info,则执行功能C,如果只有-vec而没有其他,则执行功能D。

    回到opencv_createsamples的参数说明:

 

【-info】 就是跟存放正样本图片目录位置相同的描述文件的路径,可用txt,dat等格式保存,每一行的内容为:xxx.jpg nums left_x left_y width heght。

比如:samples_1.jpg 1 0 0 20 20这样,就是指某个正样本是samples_1.jpg的图片,图片中有1个目标区域,区域的左上角坐标为(0,0),区域的宽度为20像素,长度为20像素。注意样本图片和这里的参数相符。

【-img】如果你要通过一张图片的扭曲形变成多张图片作为样本,就填写这个参数,参数的内容为要扭曲的图片的路径。填入后,-info参数不再有效。

【-vec】要生成用于训练的vec文件的路径,内容为:xxx/xxx/xxx/xxx.vec

【-bg】 如果省略,则使用bgcolor的值填充作为背景。就是跟存放负样本图片(背景图片)目录位置相同的描述文件的路径,可用txt,dat等格式保存,,每一行的内容为:xxx.jpg。这里要注意的是,不要填入图片的完整路径,不然会报错。但训练样本opencv_traincascade也需要传入一个-bg参数,但那个参数的描述文件每一行是要用完整路径的,这有点怪。

【-num】要创建的样本的数量,使用-info生成时,不要比你准备的正样本图片数量大就行了

【-bgcolor】这是创建样本是样本扭曲函数中用来决定像素是有效还是作为背景过滤的基本值,因为操作的是灰度图,所以这个值0范围是~255。

【-bgthresh】决定背景掩码的实际取值范围为bgcolor-bgthresh ——bgcolor-bgthresh

【-inv】【-randinv】这是样本生成时,是否需要反相或随机反相,这个在车牌这样的数字中就需要,比如说白底黑字的车牌和蓝底白字的车牌,两者生成的样本是相反的,前者数字是黑色,后者数字是白色。所以这个参数按你实际需要使用吧。

【-maxidev】一个用于生成前景(有效像素区域)灰度值的常数值,实际样本的前景灰度值会根据这个参数结合随机数产生多种不同的灰度值。

【-maxxangle】对样本图片的x轴方向的扭曲的最大弧度,X轴即是图片水平方向的旋转。

【-maxyangle】对样本图片的y轴方向的扭曲的最大弧度,Y轴即是图片竖直方向的旋转。

【-maxyangle】对样本图片的z轴方向的扭曲的最大弧度,Z轴即是垂直于图像平面的方向的旋转(可理解为旋转轴是一条穿过显示器的垂线)。

【-show】样本创建期间,是否通过imshow显示出每一个生成的样本图片出来。

【-w】要创建的样本图片的宽度,后面的训练样本步骤要使用和这时一样的值,不然会报错

【-h】要创建的样本图片的高度,后面的训练样本步骤要使用和这时一样的值,不然会报错


暂时没有想到要补充和注意的,以后有机会再补充。建议训练的时候先设-num为10,然后启用-show,自己感受一下一些参数的意义和影响,不要想当然。


  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`opencv_createsamples.exe` 是 OpenCV 中用于生成训练样本的命令行工具。下面是 `opencv_createsamples.exe` 命令的基本语法: ``` opencv_createsamples.exe -info <info_file> -vec <vec_file> [-num <number_of_samples>] [-w <sample_width>] [-h <sample_height>] [-maxxangle <max_x_rotation_angle>] [-maxyangle <max_y_rotation_angle>] [-maxzangle <max_z_rotation_angle>] [-bgcolor <background_color>] [-bgthresh <background_threshold>] [-maxidev <max_intensity_deviation>] [-maxsdev <max_color_deviation>] [-randseed <random_seed>] [-show] ``` 其中,参数的含义如下: - `-info`:指定包含正样本文件名及其对应的目标框信息的文本文件名。 - `-vec`:指定输出的正样本向量文件名。 - `-num`:指定生成的样本数量,默认为 `1000`。 - `-w`:指定生成的样本宽度,默认为 `24`。 - `-h`:指定生成的样本高度,默认为 `24`。 - `-maxxangle`:指定样本在 X 轴方向上的最大旋转角度,默认为 `0`。 - `-maxyangle`:指定样本在 Y 轴方向上的最大旋转角度,默认为 `0`。 - `-maxzangle`:指定样本在 Z 轴方向上的最大旋转角度,默认为 `0`。 - `-bgcolor`:指定背景颜色,默认为 `0`。 - `-bgthresh`:指定背景阈值,默认为 `0`。 - `-maxidev`:指定样本像素强度的最大变化量,默认为 `40`。 - `-maxsdev`:指定样本颜色的最大变化量,默认为 `40`。 - `-randseed`:指定随机数生成器的种子值,默认为 `0`。 - `-show`:在生成样本时显示每个样本的图片。 注意,`opencv_createsamples.exe` 只能生成正样本,如果需要生成负样本,则需要使用其他工具或手动创建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值