opencv之级联分类器训练opencv_traincascade
2014-01-02 11:40
525 查看
第一步:准备好正负样本图片,正样本就是含有目标的图片,负样本就是不含有目标的图片,建好文件夹(如下图所示)。其中正样本图片最好是裁剪成同一尺寸,我这里是建成28*28,便于后期的说明文件的建立。
第二步:生成文件名列表
aa.bat 为批量生成文件名的程序(大家可以建个文本输入下面的内容就可制作,“.bat”结尾)
使用的时候只需要连击两下bat这个文件就能生成一个.txt 的文件,里面是当前目录下的文件名,删除里面不是图像的文件名
neg->负样本
pos->正样本
下图为neg 文件夹里面的内容以及txt的内容
下图为pos的文件夹以及txt的内容
第三步:生成训练样本
下图为生成训练样本的程序(当然opencv_createsamples.exe 在opencv /build/x86/vc10/bin里面,我放在了D盘根目录下)
利用opencv_createsamples.exe应用程序在该目录下使用如图cmd命令:
其中的-vec是指定后面输出vec文件的文件名,-info指定正样本描述文件,-bg指定负样本描述文件,-w和-h分别指正样本的宽和高,-num表示正样本的个数。执行完该命令后就会在当前目录下生产一个pos.vec文件了。
成功的话效果如下:
第四步:训练
首先在当前目录下新建一个dt文件夹用于存放生成的.xml文件。
在当前目录使用cmd命令:
D:\>opencv_traincascade.exe -data dt -vec pos.vec -bg neg/neg.txt -numPos 100 -n
umNeg 300 -numStages 5 -precalcValbufSize 200 -precalcdxBufSize 1000 -featureTy
pe HOG -w 28 -h 28截图如下:其中-data 输出目录,-numPos正样本数目-numNeg负样本数目-numStages训练级数
训练成功结果如下图:
这里附上简单的测试程序
第二步:生成文件名列表
aa.bat 为批量生成文件名的程序(大家可以建个文本输入下面的内容就可制作,“.bat”结尾)
使用的时候只需要连击两下bat这个文件就能生成一个.txt 的文件,里面是当前目录下的文件名,删除里面不是图像的文件名
neg->负样本
pos->正样本
下图为neg 文件夹里面的内容以及txt的内容
下图为pos的文件夹以及txt的内容
第三步:生成训练样本
下图为生成训练样本的程序(当然opencv_createsamples.exe 在opencv /build/x86/vc10/bin里面,我放在了D盘根目录下)
利用opencv_createsamples.exe应用程序在该目录下使用如图cmd命令:
其中的-vec是指定后面输出vec文件的文件名,-info指定正样本描述文件,-bg指定负样本描述文件,-w和-h分别指正样本的宽和高,-num表示正样本的个数。执行完该命令后就会在当前目录下生产一个pos.vec文件了。
成功的话效果如下:
第四步:训练
首先在当前目录下新建一个dt文件夹用于存放生成的.xml文件。
在当前目录使用cmd命令:
D:\>opencv_traincascade.exe -data dt -vec pos.vec -bg neg/neg.txt -numPos 100 -n
umNeg 300 -numStages 5 -precalcValbufSize 200 -precalcdxBufSize 1000 -featureTy
pe HOG -w 28 -h 28截图如下:其中-data 输出目录,-numPos正样本数目-numNeg负样本数目-numStages训练级数
训练成功结果如下图:
这里附上简单的测试程序
#include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/ml/ml.hpp" #include <iostream> using namespace std; using namespace cv; string cascadeName = "cascade.xml";//训练数据 int main( ) { CascadeClassifier cascade;//创建级联分类器对象 vector<Rect> rects; vector<Rect>::const_iterator pRect; double scale = 1.; Mat image; double t; if( !cascade.load( cascadeName ) )//从指定的文件目录中加载级联分类器 { cerr << "ERROR: Could not load classifier cascade" << endl; return 0; } Mat gray, smallImg; string filename = "图片路径"; image = imread(filename); cvtColor( image, smallImg, CV_BGR2GRAY );//灰度转换 rects.clear(); printf( "begin...\n"); t = (double)cvGetTickCount();//用来计算算法执行时间 vector<int> level; vector<double> reject; cascade.detectMultiScale(smallImg,rects,1.1,3,0,Size(30,30),Size(100,100));//这里可能某些数据需要修改 t = (double)cvGetTickCount() - t; printf( "detection time = %g ms\n\n", t/((double)cvGetTickFrequency()*1000.) ); for(pRect = rects.begin(); pRect != rects.end(); pRect++) { rectangle(image,cvPoint(pRect->x,pRect->y),cvPoint(pRect->x+pRect->width,pRect->y+pRect->height),cvScalar(0,255,0)); } imwrite("1.jpg",image); waitKey(); return 0; }
相关文章推荐
- linux下,使用opencv训练级联分类器opencv_traincascade
- opencv之级联分类器训练opencv_traincascade
- opencv之级联分类器训练opencv_traincascade
- linux环境下使用opencv训练级联分类器traincascade
- OpenCV学习笔记:如何训练级联分类器
- opencv之级联分类器训练属于自己的xml文件
- 如何利用OpenCV自带的级联分类器训练程序训练分类器
- 使用OpenCV训练级联分类器
- opencv训练级联分类器
- 目标检测之训练opencv自带的分类器(opencv_haartraining 或 opencv_traincascade)
- opencv_traincascade训练分类器,手势识别。
- opencv中cascade级联分类器在检测任务中的训练使用
- 为什么opencv train_cascade训练级联分类器时,lbp特征比haar_like特征快?
- 使用OpenCV的Haar特征训练身份证级联分类器
- opencv_traincascade 训练自己的分类器
- opencv之级联分类器训练opencv_haartraining
- OpenCV 人脸检测自学(6)opencv_traincascade如何训练强弱分类器
- Opencv目标检测之级联分类器训练与测试
- 用OpenCV训练级联分类器
- 官方文档-opencv训练级联分类器