资源简介
程序测试环境 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
- 上一篇:Qt-C++实现文件浏览器
- 下一篇:VS2010 C++配色方案 主题
相关资源
- 人脸识别(opencv_facedetect_v4l2)
- 基于opencv的模板匹配代码
- opencv图片扫描以及校正
- SVM算法实现(源码+文档)
- opencv手部轮廓识别以及轨迹识别
- opencv2 3D标定.cpp
- 基于opencv漫水填充算法综合
- opencv激光中心线的提取
- OpenCV Computer Vision Application Programming
- 基于图割的图像分割OpenCV+MFC实现
- 识别魔方颜色
- opencv版俄罗斯方块源码
- VS2013 / MFC + OpenCV 2.4.9实现视频的播放
- 台湾林智仁开发的libsvm-3.0.1
- 粒子滤波器+目标跟踪的C++实现,VS2
- 张平OpenCV算法精讲基于python和C++教材
- 虹膜识别开源代码OSIRIS4.1基于opencv
- Sift特征点提取与匹配opencv库
- YCbCr、混合高斯以及YCbCg肤色检测模型
- 光流法代码
- OpenCV打开摄像机显示在MFC窗口工程源
- 如何在Visual StudioVS里使用libsvm工具箱
- 使用c++读取图像到二维矩阵
- 三维点云的圆柱面拟合
- SVM分类算法实验报告+C语言程序 加强
- MFC+OPENCV摄像机标定程序
- 基于特征脸的人脸识别MFC+OpenCV
- opencv图像处理MFC
- OPENCV人脸检测加角点检测并输出坐标
- FillHole.rar
评论
共有 条评论