資源簡介
程序測試環境 VS2013+Opencv2.4.12
遍歷文件夾下所有手寫數字圖片 處理后壓如堆棧 最后用SVM進行分類識別
代碼片段和文件信息
/*************************************
本程序編寫測試環境: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);//根據文件名設置每幅圖像的預測輸出?
float?RightRate(Mat&?inputImage?vector?&Tfilenames);//計算正確率的函數
int?main()
{
HelpTextshow();
cout?<“是否已新建好train文件夾和test文件夾,“?<
char?flag;
cin?>>?flag;
while?(1)
{
if?(flag?==?‘y‘?||?flag?==?‘Y‘)
{
cout?<“數據正在處理,請稍候“?< break;
}
else?if?(flag?==?‘n‘?||?flag?==?‘N‘)
{
return?0;
}
else
continue;
}
//SVM?訓練部分---------------------------------------------
//用于存儲訓練的數據
cv::Directory?TrainDir;//用于遍歷路徑下文件的類
string?path1?=?“D:/train“;//訓練樣本所在文件夾
string?exten1?=?“*.bmp“;//訓練樣本的后綴名
bool?addPath1?=?true;//true;??//是true則函數返回文件絕對路徑和文件名,是false則返回文件名
vector?Train_pathnames?=?TrainDir.GetListFiles(path1?exten1?addPath1);//存儲所有待訓練樣本的路徑+文件名
vector?Train_filenames?=?TrainDir.GetListFiles(path1?exten1?false);//存儲所有待訓練樣本的文件名?用于分配ANN-MLP的預測輸出
/* cout?<“file?names:?“?< for?(int?i?=?0;?i? cout?<
vector?Image;//用于存儲所有的待訓練樣本
vector?PredictResult;//用于存儲待訓練樣本的預測輸出
Image.clear();
PredictResult.clear();
//遍歷目標文件夾,讀入所有待訓練樣本,
for?(int?i?=?0;?i? {
Image.push_back(imread(Train_pathnames[i]?0));//將待訓練樣本壓入Image
// imshow(filenames[i]?Image[i]);
// cout?< SetPredictResult(Train_filenames[i]?PredictResult);//設置存入的圖像的對應的預測輸出
}
Mat?data?=?formatImagesForANN(Image);//將待訓練圖像展成一行存儲到data
Mat?TrainResultTemp(PredictResult);//將對應預測輸出存儲到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);
//------------------------?訓練SVM----------------------------------------------------
cout?<“開始訓練“?< CvSVM?svm;
svm.train(data?TrainResult?Mat()?Mat()?params);
cout?<“訓練結束“?<
//測試識別部分 ---------------------------------------------------------------
//用于存儲測試的數據
cv::Directory?TestDir;//用于遍歷路徑下文件的類
string?path2?=?“D:/test“;//測試樣本所在文件夾
string?exten2?=?“*.bmp“;//測試樣本的后綴名
bool?addP
- 上一篇:Qt-C++實現文件瀏覽器
- 下一篇:VS2010 C++配色方案 主題
評論
共有 條評論