资源简介
程序测试环境 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 正脸+左右侧脸全检测
- 激光雷达数据读取、显示、分割、直
- CvvImage类库
- 基于opencv的C++人眼识别以及眨眼检测
- 在VS2012上基于opencv的C++人眼识别与眨
- 基于暗通道和导向滤波的图像去雾算
- 根据原图和二值图得到分割彩图
- qt界面化实现各种滤波函数
- c#通过dll读取opencv里的mat图片
- linux opencv车牌识别
- svm_smo_多分类_c++
- opencv多视频同一窗口显示C++程序
- 基于opencv的手势识别
- 利用opencv做的垃圾检测代码
- Opencv3.0 鱼眼相机标定fisheye
- libsvm工具箱libsvm-3.22版
- LSD直线提取算法Opencv
- 使用vc++6.0调用opencv库函数生成5*5单位
- opencv绘制点与坐标系
- 基于socket和opencv在linux中实现摄像头实
- 图片浏览器实现和图像编辑器实现源
- danmu 基于opencv平台编写的单目相机标
- OpenCV边缘检测程序 by浅墨
- c++视频教程opencv视频图像处理机器视
- OpenCV单目视觉定位测量C++代码
- YUV数据转换成opencv的Mat的RGB<
- 一种多尺度检测的KCF的python实现代码
- c++二维码识别opencv+zbar
- 图像识别细胞检测与计数系统vc源码
- 通过封装的opencv函数进行yuv.nv12到jp
评论
共有 条评论