資源簡介
本次實驗使用opencv中的ml組件中的SVM做有無行人的判別,內(nèi)涵完整代碼和圖片數(shù)據(jù)。
代碼片段和文件信息
#include???
#include???
#include???
#include???
#include???
#include???
#include???
#define?PosSamNum?100????//正樣本個數(shù)??
#define?NegSamNum?100???//負樣本個數(shù)??
std::string?train_image_folder?=?“./“;
std::string?test_image_folder??=?“./“;
void?train(){
std::cout<<“start?traning...“<
std::ifstream?train_pos_file(train_image_folder?+?“train/pos.lst“);
std::ifstream?train_neg_file(train_image_folder?+?“train/neg.lst“);
std::string?image_name;?//圖片路徑
cv::Mat?src;
//定義HOG檢測器
int?descriptor_dim?=?0;
//檢測窗口(64128)塊尺寸(1616)塊步長(88)cell尺寸(88)直方圖bin個數(shù)9?
cv::HOGDescriptor?hog(cv::Size(64128)cv::Size(1616)cv::Size(88)cv::Size(88)9);//HOG檢測器,用來計算HOG描述子的
std::vector?descriptors;?//HOG描述子向量
cv::Mat?sample_features;?//所有訓練樣本的特征向量組成的矩陣,行數(shù)等于所有樣本的個數(shù),列數(shù)等于HOG描述子維數(shù)??
cv::Mat?sample_labels;??//訓練樣本的類別向量,行數(shù)等于所有樣本的個數(shù),列數(shù)等于1;1表示有人,-1表示無人??
//獲取訓練數(shù)據(jù)的正樣本
for(int?num=0;?num image_name?=?train_image_folder?+?image_name;
src?=?cv::imread(image_name0);
????????
????????cv::resize(srcsrccv::Size(96160));?//統(tǒng)一訓練格式
if(src.empty()){
std::cout<<“no?image?in?pos?image?path:“< exit(0);
}
hog.compute(srcdescriptorscv::Size(88));
if(num==0){
std::cout<<“Init?feature?size...“< descriptor_dim?=?descriptors.size();
sample_features?=?cv::Mat::zeros(PosSamNum+NegSamNumdescriptor_dimCV_32FC1);
sample_labels???=?cv::Mat::zeros(PosSamNum+NegSamNum1CV_32SC1);?//注意這里必須要32SC1不能用32FC1
}
for(int?i=0;iriptor_dim;i++){
sample_features.at(numi)?=?descriptors[i];
}
sample_labels.at(num0)?=?1;?//正樣本類別為1,有人
std::cout<<“finish?Pos?“<
}
//獲取訓練數(shù)據(jù)的負樣本
for(int?num=0;num image_name?=?train_image_folder?+?image_name;
src?=?cv::imread(image_name0);
if(src.empty()){
std::cout<<“no?image?in?neg?image?path...“< exit(0);
}
cv::resize(srcsrccv::Size(96160));
hog.compute(srcdescriptorscv::Size(88));
for(int?i=0;iriptor_dim;i++){
sample_features.at(num+PosSamNumi)?=?descriptors[i];
}
sample_labels.at(num+PosSamNum0)?=?-1;?//正樣本類別為-1,沒有人
std::cout<<“finish?Neg?“< }
//訓練SVM分類器
std::cout<<“start?svm?training...“< cv::Ptr?svm?=?cv::ml::SVM::create();
svm->setType(cv::ml::SVM::C_SVC);
svm->setKernel(cv::ml::SVM::LINEAR);
svm->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER?100?1e-6));
svm->train(sample_featurescv::ml::ROW_SAMPLEsample_labels);
//保存SVM分類器
std::cout<<“start?saving?svm?file...“< svm->save(“test_svm.xml“);
std::cout<<“finish?training...“< return;
}
void?test(std::string?test_im
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-03-05?14:05??Pedestrian?recognition\
?????文件??????493420??2017-03-05?10:12??Pedestrian?recognition\gcc_commands.docx
?????文件????????4799??2017-03-05?10:05??Pedestrian?recognition\test_svm.cpp
?????目錄???????????0??2017-03-05?14:05??Pedestrian?recognition\train\
?????目錄???????????0??2017-03-05?14:05??Pedestrian?recognition\train\neg\
?????文件???????34982??2017-03-05?10:31??Pedestrian?recognition\train\neg.lst
?????文件???????75789??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000002a.png
?????文件??????125260??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000003a.png
?????文件???????99005??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000004a.png
?????文件???????85053??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000005a.png
?????文件??????117914??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000006a.png
?????文件??????167692??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000010a.png
?????文件??????161229??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000011a.png
?????文件???????97190??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000012a.png
?????文件??????167631??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000014a.png
?????文件??????144751??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000015a.png
?????文件??????141506??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000030a.png
?????文件??????121766??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000033a.png
?????文件??????130510??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000051a.png
?????文件???????86046??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000052a.png
?????文件??????106541??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000053a.png
?????文件??????120286??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000054a.png
?????文件???????78707??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000055a.png
?????文件??????130531??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000056a.png
?????文件??????124379??2017-03-05?10:33??Pedestrian?recognition\train\neg\00000057a.png
?????文件??????154481??2017-03-05?10:32??Pedestrian?recognition\train\neg\00000058a.png
?????文件??????143847??2017-03-05?10:32??Pedestrian?recognition\train\neg\00000060a.png
?????文件??????136301??2017-03-05?10:32??Pedestrian?recognition\train\neg\00000061a.png
?????文件??????126152??2017-03-05?10:32??Pedestrian?recognition\train\neg\00000062a.png
?????文件??????151182??2017-03-05?10:32??Pedestrian?recognition\train\neg\00000068a.png
?????文件???????94886??2017-03-05?10:32??Pedestrian?recognition\train\neg\00000070a.png
............此處省略198個文件信息
評論
共有 條評論