基于HOG+SVM的行人检测系统


本资源为HOG+SVM实现的行人检测系统,包括完整的训练、检测和测试程序。检测程序运行环境为VS2013+opencv2.4.13和QT+opencv3.1.0,测试程序运行环境为matlab2016,具体运行方法见资源中的.txt说明文件。
资源截图
代码片段和文件信息
// Pedestriandetection.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include
#include 
#include 
#include “opencv2/video/background_segm.hpp“
#include 

using namespace std;
using namespace cv;

#define PosSamNO 2400  //正样本个数
#define NegSamNO 12660    //负样本个数

#define TRAIN false   //是否进行训练true表示重新训练,false表示读取xml文件中的SVM模型
#define CENTRAL_CROP true   //true:训练时,对96*160的INRIA正样本图片剪裁出中间的64*128大小人体

//HardExample:负样本个数。如果HardExampleNO大于0,表示处理完初始负样本集后,继续处理HardExample负样本集。
//不使用HardExample时必须设置为0,因为特征向量矩阵和特征类别矩阵的维数初始化时用到这个值
#define HardExampleNO 0  

void press(HOGDescriptor &myHOG Mat src);
//继承自CvSVM的类,因为生成setSVMDetector()中用到的检测子参数时,需要用到训练好的SVM的decision_func参数,
//但通过查看CvSVM源码可知decision_func参数是protected类型变量,无法直接访问到,只能继承之后通过函数访问
class MySVM : public CvSVM
{
public:
//获得SVM的决策函数中的alpha数组  
double * get_alpha_vector()
{

return this->decision_func->alpha;
}

//获得SVM的决策函数中的rho参数即偏移量  
float get_rho()
{
return this->decision_func->rho;
}
};



int main()
{
//检测窗口(64128)块尺寸(1616)块步长(88)cell尺寸(88)直方图bin个数9
HOGDescriptor hog(Size(64 128) Size(16 16) Size(8 8) Size(8 8) 9);//HOG检测器,用来计算HOG描述子的
int DescriptorDim;//HOG描述子的维数,由图片大小、检测窗口大小、块大小、细胞单元中直方图bin个数决定
MySVM svm;//SVM分类器

//若TRAIN为true,重新训练分类器
if (TRAIN)
{
string ImgName;//图片名(绝对路径)
ifstream finPos(“E:\项目\数字图像处理\INRIAPerson\INRIAPerson\96X160H96\Train\INRIAPerson96X160PosList.txt“);//正样本图片的文件名列表
//ifstream finPos(“PersonFromVOC2012List.txt“);//正样本图片的文件名列表
ifstream finNeg(“E:\项目\数字图像处理\INRIAPerson\INRIAPerson\NoPersonFromINRIAList.txt“);//负样本图片的文件名列表

Mat sampleFeatureMat;//所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数
Mat sampleLabelMat;//训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,-1表示无人


//依次读取正样本图片,生成HOG描述子
for (int num = 0; num {
cout << “处理:“ << ImgName << endl;
//ImgName = “D:\DataSet\PersonFromVOC2012\“ + ImgName;//加上正样本的路径名
ImgName = “E:\项目\数字图像处理\INRIAPerson\INRIAPerson\96X160H96\Train\pos\“ + ImgName;//加上正样本的路径名
Mat src = imread(ImgName);//读取图片
if (CENTRAL_CROP)
src = src(Rect(16 16 64 128));//将96*160的INRIA正样本图片剪裁为64*128,即剪去上下左右各16个像素
//resize(srcsrcSize(64128));

vector descriptors;//HOG描述子向量
hog.compute(src descriptors Size(8 8));//计算HOG描述子,检测窗口移动步长(88)
//
cout << “描述子维数:“ << descriptors.size() << endl;

//处理第一个样本时初始化特征向量矩阵和类别矩阵,因为只有知道了特征向量的维数才能初始化特征向量矩阵
if (0 == num)
{
DescriptorDim = descriptors.size();//HOG描述子的维数
//初始化所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数sampleFeatureMat
sampleFeatureMat = Ma

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-03-25 00:41  行人检测工程文件
     目录           0  2019-03-25 00:40  行人检测工程文件Pedestriandetection
     目录           0  2019-03-25 00:40  行人检测工程文件PedestriandetectionDebug
     文件      184320  2018-05-18 19:50  行人检测工程文件PedestriandetectionDebugPedestriandetection.exe
     文件      960104  2018-05-18 19:50  行人检测工程文件PedestriandetectionDebugPedestriandetection.ilk
     文件     3165184  2018-05-18 19:50  行人检测工程文件PedestriandetectionDebugPedestriandetection.pdb
     文件       44073  2018-05-18 19:51  行人检测工程文件PedestriandetectionHOGDetectorForOpenCV.txt
     目录           0  2019-03-25 00:40  行人检测工程文件PedestriandetectionPedestriandetection
     目录           0  2019-03-25 00:40  行人检测工程文件PedestriandetectionPedestriandetectionDebug
     目录           0  2019-03-25 00:40  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestri.EA9A9B55.tlog
     文件       13766  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestri.EA9A9B55.tlogCL.read.1.tlog
     文件        1384  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestri.EA9A9B55.tlogCL.write.1.tlog
     文件         169  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestri.EA9A9B55.tlogPedestriandetection.lastbuildstate
     文件        1878  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestri.EA9A9B55.tlogcl.command.1.tlog
     文件        2438  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestri.EA9A9B55.tloglink.command.1.tlog
     文件        5028  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestri.EA9A9B55.tloglink.read.1.tlog
     文件         726  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestri.EA9A9B55.tloglink.write.1.tlog
     文件        3373  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestriandetection.log
     文件      824508  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestriandetection.obj
     文件     1703936  2018-05-13 10:24  行人检测工程文件PedestriandetectionPedestriandetectionDebugPedestriandetection.pch
     文件       11194  2018-05-13 10:24  行人检测工程文件PedestriandetectionPedestriandetectionDebugstdafx.obj
     文件      756736  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugvc120.idb
     文件     1781760  2018-05-18 19:50  行人检测工程文件PedestriandetectionPedestriandetectionDebugvc120.pdb
     文件       13053  2018-05-18 19:51  行人检测工程文件PedestriandetectionPedestriandetectionPedestriandetection.cpp
     文件        4672  2018-05-13 10:24  行人检测工程文件PedestriandetectionPedestriandetectionPedestriandetection.vcxproj
     文件        1326  2018-05-13 10:19  行人检测工程文件PedestriandetectionPedestriandetectionPedestriandetection.vcxproj.filters
     文件        1594  2018-05-13 10:19  行人检测工程文件PedestriandetectionPedestriandetectionReadMe.txt
     文件         225  2018-05-13 10:19  行人检测工程文件PedestriandetectionPedestriandetectionstdafx.cpp
     文件         234  2018-05-13 10:19  行人检测工程文件PedestriandetectionPedestriandetectionstdafx.h
     文件         236  2018-05-13 10:19  行人检测工程文件PedestriandetectionPedestriandetection argetver.h
     文件          44  2018-05-18 19:47  行人检测工程文件PedestriandetectionPedestriandetection.opensdf
............此处省略20个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)