OpenCV训练级联分类器

本文详细介绍了如何使用OpenCV的级联分类器进行物体检测,包括样本的准备(正负样本格式和文本描述),以及使用opencv_createsamples和opencv_traincascade命令行工具进行训练的过程,涉及参数的选择和常见问题解决。
摘要由CSDN通过智能技术生成

0.预先准备
我们需要用到的是opencv自带的级联分类器:
主要是opencv_traincascade.exe和opencv_createsamples.exe;
位置类似:opencv/build/x64/vc15/bin;
只需要设置好opencv的环境变量即可;
在控制台直接输出函数:


1.准备样本:
准备的格式为存放正负样本的两个文件夹,以及2个txt文本描述:

这里负样本放在bg文件夹,文本描述在bg.txt;
这里正样本放在new_samples文件夹,文本描述在info.txt;
正样本图像大小已统一;
文本格式类似(记录图片的地址):


正样本的格式为:
例如1: 数字1表示图中一个目标,标示其在图像中的位置和大小的矩形为(140, 100, 45, 45)

在准备样本的过程中可能需要把大量文件夹的图片整合到一个文件夹并同意命名:
可参考:https://blog.csdn.net/sazass/article/details/92832942
代码输出指定内容txt描述文件,
可参考:https://blog.csdn.net/sazass/article/details/92833146

2.使用opencv_createsamples创建正样本vec格式
打开控制台,输出opencv_createsamples:
下面是各个参数的详解。
一般主要用到:

-info 正样本描述文件的地址
-vec 输出的vec文件地址
-w 正样本的宽
-h 正样本的高
-num 正样本数量(越少越快,一般不超过正样本库的数目)
1
2
3
4
5
其他参数可查看
https://blog.csdn.net/sean_xyz/article/details/80002266

开始创建(时间大约几分钟):

第二阶段结束。

注意:最开始opencv_createsamples创建的时候陷入到了无穷等待中:后来发现正样本的尺寸很乱,后来是直接统一了所有正样本的尺寸大小,规范了一下正样本描述文件的地址(格式可参考上步);然后再次创建就很快的成功了!

3.使用opencv_traincascade训练模型
打开控制台:

这里主要需要用到的参数详细说明:
https://blog.csdn.net/sazass/article/details/89196350

遇到问题:

这个问题应该是描述文件的地址问题,控制台若是在当前文件夹内则可用相对地址,否则需要用绝对地址。
正样本若整个图片都是一个目标,最好中描述文件中加入参数(坐标尺寸):1 0 0 24 36

还有一些是x64与x86的问题,灵活处理。

关于opencv_traincascade具体参数:

1.通用参数:
-stageType <BOOST(default)>

-data <cascade_dir_name>  目录名,如不存在训练程序会创建它,用于存放训练好的分类器。
vec <vec_file_name>  包含正样本的vec文件名(由 opencv_createsamples 程序生成)。
-bg <background_file_name>  背景描述文件,也就是包含负样本文件名的那个描述文件。
-numPos <number_of_positive_samples>  每级分类器训练时所用的正样本数目。
-numNeg <number_of_negative_samples>  每级分类器训练时所用的负样本数目,可以大于 -bg 指定的图片数目。
-numStages <number_of_stages>  训练的分类器的级数。
-precalcValBufSize <precalculated_vals_buffer_size_in_Mb>  缓存大小,用于存储预先计算的特征值(feature values),单位为MB。
-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb>  缓存大小,用于存储预先计算的特征索引(feature indices),单位为MB。内存越大,训练时间越短。
-baseFormatSave  这个参数仅在使用Haar特征时有效。如果指定这个参数,那么级联分类器将以老的格式存储。
1
2
3
4
5
6
7
8
9
2.级联参数:

-stageType <BOOST(default)>  级别(stage)参数。目前只支持将BOOST分类器作为级别的类型。
-featureType<{HAAR(default), LBP}>      特征的类型: HAAR - 类Haar特征; LBP - 局部纹理模式特征。
-w <sampleWidth>
-h <sampleHeight>  训练样本的尺寸(单位为像素)。必须跟训练样本创建(使用 opencv_createsamples 程序创建)时的尺寸保持一致。
1
2
3
4
3.Boosted分类器参数:

-bt <{DAB, RAB, LB, GAB(default)}>    Boosted分类器的类型: DAB - Discrete AdaBoost, RAB - Real AdaBoost, LB - LogitBoost, GAB - Gentle AdaBoost。
-minHitRate <min_hit_rate>    分类器的每一级希望得到的最小检测率。总的检测率大约为 min_hit_rate^number_of_stages。
-maxFalseAlarmRate <max_false_alarm_rate>  分类器的每一级希望得到的最大误检率。总的误检率大约为 max_false_alarm_rate^number_of_stages.
-weightTrimRate <weight_trim_rate>    Specifies whether trimming should be used and its weight. 一个还不错的数值是0.95。
-maxDepth <max_depth_of_weak_tree>   弱分类器树最大的深度。一个还不错的数值是1,是二叉树(stumps)。
-maxWeakCount <max_weak_tree_count>  每一级中的弱分类器的最大数目。The boosted classifier (stage) will have so many weak trees (<=maxWeakCount), as needed to achieve the given -maxFalseAlarmRate.
1
2
3
4
5
6
4.类Haar特征参数:

-mode <BASIC (default) | CORE | ALL>   择训练过程中使用的Haar特征的类型。 BASIC 只使用右上特征, ALL 使用所有右上特征和45度旋转特征
1
5.LBP特征参数:
LBP特征无参数。

开始训练:

————————————————
版权声明:本文为CSDN博主「紫金修道」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sazass/article/details/93073840

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Part I 基础篇 OpenCV 开发基础. 1 第 1 章初识 OpenCV.. 3 1.1 OpenCV 初识 4 1.1.1 OpenCV 简介.. 4 1.1.2 OpenCV 组件及架构.. 5 1.1.3 OpenCV 资源.. 9 1.2 VS2012 安装OpenCV2.4.x .. 9 1.3 VS2013 安装OpenCV3.0 14 1.4 Sublime 下配置OpenCV. 16 1.5 小结 19 第2 章图像及视频基本操作. 20 2.1 图像初级操作 21 2.1.1 Mat 类 21 2.1.2 Mat 基本操作 23 2.1.3 Mat 类型转换 24 2.1.4 图像读取显示保存 24 2.1.5 图像存储. 26 2.2 图像几何变换 28 2.2.1 坐标映射. 28 2.2.2 平移 29 2.2.3 缩放 33 2.2.4 旋转 36 2.2.5 仿射变换. 40 2.3 视频操作.. 43 2.3.1 VideoCapture 类.. 43 2.3.2 视频写操作 45 2.3.3 视频质量评价.. 48 2.4 图像基础应用操作. 50 2.4.1 界面事件. 50 2.4.2 区域提取. 54 2.4.3 图像元素遍历——反色.. 58 2.4.4 单窗口显示多幅图像 63 2.4.5 图像颜色空间转换 66 2.4.6 图像批量读取——规则.. 69 2.4.7 图像批量读取——无规则. 70 2.5 小结 71 Part II 进阶篇图像处理技术.. 73 第 3 章进阶篇——图像灰度变换技术. 75 3.1 阈值化处理. 76 3.1.1 OTSU 阈值化 76 3.1.2 固定阈值化 79 3.1.3 自适应阈值化.. 81 3.1.4 双阈值化. 83 3.1.5 半阈值化. 84 3.2 直方图处理. 85 3.2.1 灰度直方图 85 3.2.2 H-S 直方图. 88 3.2.3 BGR 直方图.. 89 3.2.4 自定义直方图.. 91 3.2.5 灰度直方图均衡. 93 3.2.6 彩色直方图均衡. 94 3.2.7 直方图变换——查找 95 3.2.8 直方图变换——累计 97 3.2.9 直方图匹配 99 3.2.10 直方图对比.. 101 3.2.11 直方图的反向投影 105 3.3 距离变换 108 3.3.1 距离. 108 3.3.2 邻接性 109 3.3.3 区域..110 3.3.4 距离变换——扫描..110 3.3.5 距离变换——distanceTransform..113 3.4 Gamma 校正.115 3.5 其他常见的灰度变换技术117 3.5.1 线性变换117 3.5.2 对数变换119 3.5.3 对比度拉伸. 121 3.5.4 灰度级分层. 124 3.5.5 灰度比特平面 125 3.6 实例应用 128 3.6.1 最大熵阈值分割.. 128 3.6.2 投影峰谷查找 131 3.7 小结. 134 第4 章进阶篇——图像平滑技术.. 135 4.1 图像采样 136 4.1.1 最近邻插值. 136 4.1.2 双线性插值. 138 4.1.3 插值操作性能对比. 140 4.1.4 图像金字塔. 143 4.2 傅里叶变换.. 146 4.2.1 图像掩码操作 146 4.2.2 离散傅里叶. 149 4.2.3 图像卷积.. 151 4.3 图像噪声 153 4.3.1 椒盐噪声.. 153 4.3.2 高斯噪声.. 155 4.4 空间平滑 157 4.4.1 盒滤波 157 4.4.2 均值滤波.. 159 4.4.3 中值滤波.. 159 4.4.4 高斯滤波.. 161 4.4.5 双边滤波.. 163 4.5 实例应用 166 4.5.1 导向滤波.. 166 4.5.2 图像污点修复 169 4.5.3 旋转文本图像矫正. 172 4.6 小结. 178 第5 章进阶篇——边缘检测技术.. 179 5.1 边缘检测基础. 180 5.1.1 边缘检测概念 180 5.1.2 梯度算子.. 180 5.1.3 一阶微分算子 180 5.1.4 二阶微分算子 181 5.1.5 图像差分运算 182 5.1.6 非极大值抑制 184 5.2 基本边缘检测算子——Sobel 184 5.2.1 非极大值抑制Sobel 检测.. 185 5.2.2 图像直接卷积实现Sobel 186 5.2.3 图像卷积下非极大值抑制Sobel. 187 5.2.4 Sobel 库函数实现 190 5.3 基本边缘检测算子——Laplace 192 5.4 基本边缘检测算子——Roberts 194 5.5 基本边缘检测算子——Prewitt. 195 5.6 改进边缘检测算子——Canny .. 198 5.6.1 Canny 算子.. 198 5.6.2 Canny 原理及实现.. 198 5.6.3 Canny 库函数实现.. 203 5.7 改进边缘检测算子——Marr-Hildreth .. 204 5.8 几何检测 207 5.8.1 霍夫变换.. 207 5.8.2 线检测技术. 208 5.8.3 LSD 快速直线检测. 210 5.8.4 圆检测技术. 214 5.9 形状检测 215 5.9.1 轮廓检测.. 215 5.9.2 凸包检测.. 217 5.9.3 轮廓边界框. 221 5.9.4 轮廓矩 226 5.9.5 点多边形测试 229 5.10 角点检测. 232 5.10.1 moravec 角点 232 5.10.2 harris 角点. 235 5.10.3 Shi-Tomasi 角点. 238 5.11 实例应用. 240 5.11.1 颜色圆检测.. 240 5.11.2 车牌区域检测.. 243 5.12 小结 249 第6 章进阶篇——形态学技术. 250 6.1 腐蚀膨胀操作. 251 6.2 开闭运算操作. 253 6.3 形态学梯度.. 255 6.4 形态学Top-Hat.. 256 6.5 实例应用 257 6.5.1 形态学滤波角点提取. 257 6.5.2 车牌目标提取 260 6.6 小结. 263 Part III 高级篇图像应用技术. 265 第 7 章高级篇——图像分割技术.. 267 7.1 分水岭分割.. 268 7.1.1 分水岭的特征 268 7.1.2 实现分水岭分割.. 269 7.1.3 分水岭分割合并.. 270 7.2 FloodFill 分割. 273 7.3 均值漂移MeanShift 276 7.4 图割Grabcut 279 7.5 实例实例 282 7.5.1 奇异区域检测 282 7.5.2 肤色检测.. 285 7.6 小结. 288 第8 章高级篇——特征分析.. 289 8.1 尺度空间 290 8.1.1 尺度与旋转不变性. 290 8.1.2 特征点尺度变换.. 290 8.2 特征描述子.. 291 8.2.1 SIFT 特征. 292 8.2.2 SURF 特征.. 296 8.2.3 ORB 特征. 300 8.3 方向梯度直方图HOG 302 8.3.1 HOG 原理. 302 8.3.2 HOG 特征提取步骤 303 8.3.3 HOGDescriptor 特征描述类.. 304 8.3.4 HOG 特征描述实现 305 8.4 局部二值模式LBP.. 309 8.4.1 经典LBP.. 309 8.4.2 圆形LBP311 8.5 Haar 特征描述 314 8.5.1 Haar 原理. 314 8.5.2 Haar 特征提取 315 8.6 应用实例 317 8.6.1 最近邻特征点目标提取 317 8.6.2 最大极值稳定区域匹配MSER 320 8.6.3 字符特征提取 324 8.6.4 车牌字符SVM 训练.. 327 8.7 小结. 331 第 9 章高级篇——复杂视频处理技术.. 332 9.1 视频稳像技术. 333 9.2 图像拼接 338 9.2.1 拼接原理及过程.. 338 9.2.2 图像拼接实现 339 9.3 高动态范围图像HDR 342 9.3.1 HDR 合成技术.. 342 9.3.2 HDR 合成原理.. 342 9.3.3 OpenCV 实现. 343 9.4 背景建模 344 9.4.1 背景差分.. 345 9.4.2 混合高斯背景建模. 345 9.4.3 混合高斯背景建模实现 346 9.4.4 混合模型MOG2 成员参数设定. 348 9.4.5 KNN 模型背景建模实现. 349 9.4.6 GMG 模型背景建模实现 351 9.5 级联分类器——人脸检测.. 353 9.5.1 级联分类器. 353 9.5.2 CascadeClassifier 类 353 9.6 应用实例 355 9.6.1 运动目标提取 355 9.6.2 TLD 单目标跟踪.. 358 9.6.3 人眼检测与跟踪.. 361 9.7 小结. 365 附录A 366 1——代码清单.. 366 2——CMake 编译OpenCV3.1 源码. 372 3——OpenCV3.1 Extra 扩展库 375 参考文献.... 379
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值