基于Opencv库中SVM模块的MNIST手写字识别数据库识别

本文介绍了如何利用OpenCV库中的SVM模块来识别MNIST手写数字数据库。MNIST包含60000个训练样本和10000个测试样本,数据以二进制格式存储。在训练过程中,SVM识别存在一定的错误率,可能是参数设置不理想。文章提供了一系列源代码文件,包括nistlabledata.h、Nistlabledata.cpp等,且在Ubuntu/Linux环境下使用OpenCV2.4进行实验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值