資源簡介
程序測試環(huán)境 VS2013+Opencv2.4.12
遍歷文件夾下所有手寫數(shù)字圖片 處理后壓如堆棧 最后用SVM進(jìn)行分類識(shí)別
代碼片段和文件信息
/*************************************
本程序編寫測試環(huán)境:VS2013+Opencv2.4.12
**************************************/
#include?
#include?
#include?
#include?
#include?
using?namespace?cv;
using?namespace?std;
void?HelpTextshow();
Mat?formatImagesForANN(const?vector?&data);//將每幅圖像展成一行
void?SetPredictResult(const?string?filename?vector&?PredictResult);//根據(jù)文件名設(shè)置每幅圖像的預(yù)測輸出?
float?RightRate(Mat&?inputImage?vector?&Tfilenames);//計(jì)算正確率的函數(shù)
int?main()
{
HelpTextshow();
cout?<“是否已新建好train文件夾和test文件夾,“?<
char?flag;
cin?>>?flag;
while?(1)
{
if?(flag?==?‘y‘?||?flag?==?‘Y‘)
{
cout?<“數(shù)據(jù)正在處理,請(qǐng)稍候“?< break;
}
else?if?(flag?==?‘n‘?||?flag?==?‘N‘)
{
return?0;
}
else
continue;
}
//SVM?訓(xùn)練部分---------------------------------------------
//用于存儲(chǔ)訓(xùn)練的數(shù)據(jù)
cv::Directory?TrainDir;//用于遍歷路徑下文件的類
string?path1?=?“D:/train“;//訓(xùn)練樣本所在文件夾
string?exten1?=?“*.bmp“;//訓(xùn)練樣本的后綴名
bool?addPath1?=?true;//true;??//是true則函數(shù)返回文件絕對(duì)路徑和文件名,是false則返回文件名
vector?Train_pathnames?=?TrainDir.GetListFiles(path1?exten1?addPath1);//存儲(chǔ)所有待訓(xùn)練樣本的路徑+文件名
vector?Train_filenames?=?TrainDir.GetListFiles(path1?exten1?false);//存儲(chǔ)所有待訓(xùn)練樣本的文件名?用于分配ANN-MLP的預(yù)測輸出
/* cout?<“file?names:?“?< for?(int?i?=?0;?i? cout?<
vector?Image;//用于存儲(chǔ)所有的待訓(xùn)練樣本
vector?PredictResult;//用于存儲(chǔ)待訓(xùn)練樣本的預(yù)測輸出
Image.clear();
PredictResult.clear();
//遍歷目標(biāo)文件夾,讀入所有待訓(xùn)練樣本,
for?(int?i?=?0;?i? {
Image.push_back(imread(Train_pathnames[i]?0));//將待訓(xùn)練樣本壓入Image
// imshow(filenames[i]?Image[i]);
// cout?< SetPredictResult(Train_filenames[i]?PredictResult);//設(shè)置存入的圖像的對(duì)應(yīng)的預(yù)測輸出
}
Mat?data?=?formatImagesForANN(Image);//將待訓(xùn)練圖像展成一行存儲(chǔ)到data
Mat?TrainResultTemp(PredictResult);//將對(duì)應(yīng)預(yù)測輸出存儲(chǔ)到Mat型中
Mat?TrainResult(static_cast(Train_pathnames.size())?1CV_32FC1);
TrainResultTemp.reshape(1?static_cast(Train_pathnames.size())).convertTo(TrainResultCV_32FC1);
// cout?<<“*********************************************“<
CvSVMParams?params;
params.svm_type?=?SVM::C_SVC;
params.C?=?0.1;
params.kernel_type?=?SVM::LINEAR;
params.term_crit?=?TermCriteria(CV_TERMCRIT_ITER?(int)1e7?1e-6);
//------------------------?訓(xùn)練SVM----------------------------------------------------
cout?<“開始訓(xùn)練“?< CvSVM?svm;
svm.train(data?TrainResult?Mat()?Mat()?params);
cout?<“訓(xùn)練結(jié)束“?<
//測試識(shí)別部分 ---------------------------------------------------------------
//用于存儲(chǔ)測試的數(shù)據(jù)
cv::Directory?TestDir;//用于遍歷路徑下文件的類
string?path2?=?“D:/test“;//測試樣本所在文件夾
string?exten2?=?“*.bmp“;//測試樣本的后綴名
bool?addP
評(píng)論
共有 條評(píng)論