• 大小: 6KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: C/C++
  • 标签: Opencv  SVM  

资源简介

程序测试环境 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文件夹,“ << endl << “新建好了按Y确认,未新建好按N键返回系统“ << endl;

char flag;
cin >> flag;
while (1)
{
if (flag == ‘y‘ || flag == ‘Y‘)
{
cout << “数据正在处理,请稍候“ << endl;
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: “ << endl;
for (int i = 0; i < filenames.size(); i++)
cout << filenames[i] << endl;*/

vector Image;//用于存储所有的待训练样本
vector PredictResult;//用于存储待训练样本的预测输出
Image.clear();
PredictResult.clear();

//遍历目标文件夹,读入所有待训练样本,
for (int i = 0; i < Train_pathnames.size(); i++)
{
Image.push_back(imread(Train_pathnames[i] 0));//将待训练样本压入Image
// imshow(filenames[i] Image[i]);
// cout << filenames[i][0] << endl;
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 << “开始训练“ << endl;
CvSVM svm;
svm.train(data TrainResult Mat() Mat() params);
cout << “训练结束“ << endl;



//测试识别部分 ---------------------------------------------------------------
//用于存储测试的数据
cv::Directory TestDir;//用于遍历路径下文件的类
string path2 = “D:/test“;//测试样本所在文件夹
string exten2 = “*.bmp“;//测试样本的后缀名
bool addP

评论

共有 条评论