最近工作遇到了需要检测图像的问题,需要自己训练分类器,根据网上的一些参考:
【MFC基础入门】基于Adaboost算法的车牌检测在OpenCV上的研究与实现
Adaboost应用系列之一:Opencv2.0中利用Adaboost训练Haar特征产生xml分类器
进行了自己的一些尝试,opencv中提供了两种训练函数:opencv_haartraining 和 opencv_traincascade,具体的解释请看:
级联分类器训练
由于时间有限,只提供了500张车牌图片,非车牌的图片倒是有3000张;第一次运行使用 opencv_haartraining 参数中 npos = 521,nneg = 3000;结果跑了两天停在第5个中无法往下运行了:第二次运行根据参考的文章中给出的公式:
设定了npos = 500,nneg = 500;结果又是很快停住并且程序出错了,后来网上说适当增加负样本数量(那还要公式干嘛??),然后将 nneg设定为 1250得到了结果仍是执行到某一步然后停住;
先要吐槽下 opencv_haartraining 和 opencv_traincascade 两者所用的参数竟然不一样,opencv_traincascade中 的numPos和numNeg分别对应 opencv_haartraining中的 npos和nneg;然后这个命令并不是你输入了错误的参数它就会报错,而是忽略掉这个错误的参数,对应的参数值就使用默认值;所以执行这个命令的时候记得看下后面它会反馈的参数值。