资源简介

基于HOG特征提取的svm行人头肩训练,提供训练集和测试集的图片,结果导出在txt文件中。

资源截图

代码片段和文件信息

// cv_test.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
 #include “opencv.hpp“  
#include   
#include   
#include   
#include   
using namespace cv;
using namespace std;


int main(int argc char** argv)
{
vector img_path;//输入文件名变量 
vector img_catg;
int nLine = 0;
string buf;
ifstream svm_data(“../SVM_DATA.txt“);//首先,这里搞一个文件列表,把训练样本图片的路径都写在这个txt文件中,使用bat批处理文件可以得到这个txt文件   
unsigned long n;

while (svm_data)//将训练样本文件依次读取进来  
{
if (getline(svm_data buf))
{
nLine++;
if (nLine % 2 == 0)//这里的分类比较有意思,看得出来上面的SVM_DATA.txt文本中应该是一行是文件路径,接着下一行就是该图片的类别,可以设置为0或者1,当然多个也无所谓 
{
img_catg.push_back(atoi(buf.c_str()));//atoi将字符串转换成整型,标志(01),注意这里至少要有两个类别,否则会出错  
}
else
{
img_path.push_back(buf);//图像路径  
}
}
}
svm_data.close();//关闭文件  

int nImgNum = nLine / 2; //读入样本数量 ,因为是每隔一行才是图片路径,所以要除以2 
////样本矩阵,nImgNum:横坐标是样本数量, WIDTH * HEIGHT:样本特征向量,即图像大小  
Mat data_mat(nImgNum 1764 CV_32FC1);  //这里第二个参数,即矩阵的列是由下面的descriptors的大小决定的,可以由descriptors.size()得到,且对于不同大小的输入训练图片,这个值是不同的
data_mat.setTo(0);
//类型矩阵存储每个样本的类型标志  
Mat res_mat(nImgNum 1 CV_32FC1);
res_mat.setTo(0);

Mat src;
Mat trainImg;//需要分析的图片,这里默认设定图片是64*64大小,所以上面定义了1764,如果要更改图片大小,可以先用debug查看一下descriptors是多少,然后设定好再运行  

//开始搞HOG特征
for (string::size_type i = 0; i != img_path.size(); i++)
{
src = imread(img_path[i].c_str() 1);
if (&src == NULL)
{
cout << “ can not load the image: “ << img_path[i].c_str() << endl;
continue;
}

cout << “ processing “ << img_path[i].c_str() << endl;

resize(src trainImg Size(64 64)CV_8UC3);   //读取图片     
HOGDescriptor *hog = new HOGDescriptor(Size(64 64) Size(16 16) Size(8 8) Size(8 8) 9);  //具体意思见参考文章12     
vectordescriptors;//结果数组     
hog->compute(trainImg descriptors Size(1 1) Size(0 0)); //调用计算函数开始计算     
cout << “HOG dims: “ << descriptors.size() << endl;
//CvMat* SVMtrainMat=cvCreateMat(descriptors.size()1CV_32FC1);  
n = 0;
for (vector::iterator iter = descriptors.begin(); iter != descriptors.end(); iter++)
{
data_mat.at(i n)= *iter;//把HOG存储下来  
n++;
}
//cout<rows< res_mat.at(i 0)= img_catg[i];
cout << “ end processing “ << img_path[i].c_str() << “ “ << img_catg[i] << endl;
}


SVM svm /*= CvSVM()*/;//新建一个SVM    
SVMParams param;//这里是参数
TermCriteria criteria;
criteria = TermCriteria(CV_TERMCRIT_EPS 1000 FLT_EPSILON);
param = SVMParams(SVM::C_SVC SVM::RBF 10.0 0.09 1.0 10.0 0.5 1.0 NULL criteria);
/*
SVM种类:CvSVM::C_SVC
Kernel的种类:CvSVM::RBF
degree:10.0(此次不使用)
gamma:8.0
coef0:1.0(此次不使用)
C:10.0
nu:0.5(此次不使用)
p:0.1(此次不使用)
然后对训练数据正规化处理,并放在CvMat型的数组里。
*/
//☆☆☆☆☆☆☆☆☆(5)SVM学习☆☆☆☆☆☆☆☆☆☆☆☆         
svm.train(data_mat res_mat Mat() Mat() param);//训练啦    
//☆☆利用训练数据和确定的学习参数进行SVM学习☆☆☆☆     
svm.save(“SVM_DATA.xml“);
//检测样本  
Mat

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-10-07 00:08  HOG_SVM(opencv2)\
     目录           0  2017-10-07 00:08  HOG_SVM(opencv2)\Datas\
     文件        9210  2017-10-06 23:40  HOG_SVM(opencv2)\Datas\Te1.jpg
     文件        8337  2017-10-05 23:25  HOG_SVM(opencv2)\Datas\Te10.jpg
     文件       14351  2017-10-05 23:26  HOG_SVM(opencv2)\Datas\Te11.jpg
     文件       10232  2017-10-05 23:27  HOG_SVM(opencv2)\Datas\Te12.jpg
     文件       13158  2017-10-05 22:41  HOG_SVM(opencv2)\Datas\Te2.jpg
     文件        8176  2017-10-05 22:42  HOG_SVM(opencv2)\Datas\Te3.jpg
     文件        6995  2017-10-05 22:42  HOG_SVM(opencv2)\Datas\Te4.jpg
     文件        2841  2017-10-05 22:44  HOG_SVM(opencv2)\Datas\Te5.jpg
     文件        6537  2017-10-05 22:45  HOG_SVM(opencv2)\Datas\Te6.jpg
     文件        3016  2017-10-05 22:45  HOG_SVM(opencv2)\Datas\Te7.jpg
     文件        4529  2017-10-05 22:46  HOG_SVM(opencv2)\Datas\Te8.jpg
     文件       16990  2017-10-05 23:24  HOG_SVM(opencv2)\Datas\Te9.jpg
     文件       13019  2017-10-05 22:32  HOG_SVM(opencv2)\Datas\Tr1.jpg
     文件       11508  2017-10-05 23:19  HOG_SVM(opencv2)\Datas\Tr10.jpg
     文件       13000  2017-10-05 23:20  HOG_SVM(opencv2)\Datas\Tr11.jpg
     文件       12585  2017-10-05 23:21  HOG_SVM(opencv2)\Datas\Tr12.jpg
     文件        1663  2017-10-05 23:30  HOG_SVM(opencv2)\Datas\Tr13.jpg
     文件        3606  2017-10-05 23:31  HOG_SVM(opencv2)\Datas\Tr14.jpg
     文件        5016  2017-10-05 23:31  HOG_SVM(opencv2)\Datas\Tr15.jpg
     文件        5724  2017-10-05 23:32  HOG_SVM(opencv2)\Datas\Tr16.jpg
     文件       11657  2017-10-05 22:33  HOG_SVM(opencv2)\Datas\Tr2.jpg
     文件       14154  2017-10-05 22:34  HOG_SVM(opencv2)\Datas\Tr3.jpg
     文件       16569  2017-10-05 22:35  HOG_SVM(opencv2)\Datas\Tr4.jpg
     文件        4345  2017-10-05 22:39  HOG_SVM(opencv2)\Datas\Tr5.jpg
     文件        4128  2017-10-05 22:36  HOG_SVM(opencv2)\Datas\Tr6.jpg
     文件        2790  2017-10-05 22:37  HOG_SVM(opencv2)\Datas\Tr7.jpg
     文件        3644  2017-10-05 22:38  HOG_SVM(opencv2)\Datas\Tr8.jpg
     文件        8113  2017-10-05 23:19  HOG_SVM(opencv2)\Datas\Tr9.jpg
     目录           0  2017-10-07 00:08  HOG_SVM(opencv2)\Debug\
............此处省略49个文件信息

评论

共有 条评论