基于Opencv库中SVM模块的MNIST手写字识别数据库识别代码。
MNIST的手写数字数据库,有60000例训练集, 10000个测试集。它是更大的数据集NIST的一个子集。 数字已经被size-normalized,是有固定大小的图像。
官方地址:http://yann.lecun.com/exdb/mnist/
有对这个数据的详细介绍。这里提一下,数据他是二进制文件格式存储的。不是图片格式,所以需要注意其数据存放格式,在opencv中进行数据格式转换。
数据格式:
TRAINING SET LABEL FILE (train-labels-idx1-ubyte):
[offset] [type] [value] [description]
0000 32 bitinteger 0x00000801(2049) magic number (MSB first)
0004 32 bitinteger 60000 number of items
0008 unsigned byte ?? label
........
xxxx unsigned byte ?? label
The labels values are 0 to 9.
TRAINING SET IMAGE FILE (train-images-idx3-ubyte):
[offset] [type] [value] [description]
0000 32 bitinteger 0x00000803(2051) magicnumber
0004 32 bitinteger 60000 number of images
0008 32 bitinteger 28 number of rows
0012 32 bitinteger 28 number of columns
0016 unsigned byte ?? pixel
0017 unsigned byte ?? pixel
........
xxxx unsigned byte ?? pixel
SVM的识别错误率:
界面:
环境:opencv2.4+Ubuntu+linux
nistlabledata.h
#ifndef NISTLABLEDATA_H
#define NISTLABLEDATA_H
#include <opencv2/opencv.hpp>
#include "nisttraindata.h"
#include "trainsformdata.h"
using namespace std;
using namespace cv;
class NISTLableData:public trainsformdata
{
public:
NISTLableData();
~NISTLableData();
private:
long int magic_number;
long int number_of_items;
static const long int magic_number_setted= 0x801;
//friend long int NISTTrainData::trainsform_32bitDataform(long int &data,unsigned char* char_nums);
public:
unsigned char magic_numbers[4],number_items[4];
long int getnumber_of_items();
bool check_magic_number();
unsigned char lable;
void trainsform_Dataforms()
{
trainsform_32bitDataform(magic_number,magic_numbers);
trainsform_32bitDataform(number_of_items,number_items);
}
void show_Data()
{
cout<<"magic_number:"<<magic_number<<endl;
cout<<"number_of_items:"<<number_of_items<<endl;
}
};
#endif // NISTLABLEDATA_H
Nistlabledata.cpp
#include "nistlabledata.h"
NISTLableData::NISTLableData()
{
magic_number=0;
number_of_items=0;
}
NISTLableData::~NISTLableData()
{
}
Nisttraindata.h
#ifndef NIST