資源簡介
基于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:?“?< continue;
}
cout?<“?processing?“?<
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:?“?<riptors.size()?< //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?“?< }
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個文件信息
評論
共有 條評論