MNIST手写数字库格式转换(c++可用的格式)

static int ReverseInt(int i)  //转换魔数,读取数据库中的图片数,行数,列数等信息
{  
    unsigned char ch1, ch2, ch3, ch4;  
    ch1 = i & 255;  
    ch2 = (i >> 8) & 255;  
    ch3 = (i >> 16) & 255;  
    ch4 = (i >> 24) & 255;  
    return((int)ch1 << 24) + ((int)ch2 << 16) + ((int)ch3 << 8) + ch4;  
} 
FileStorage ImageDataSet;//将数字库中的数据转换成Mat图片类型(28*28),并保存到xml文件中
    ImageDataSet.open("/home/shensy/Code/c++/opencv3编程入门/手写数字识别/database/TestImageDataSet.xml",FileStorage::WRITE);
    ifstream file;
	file.open("/home/shensy/Code/c++/opencv3编程入门/手写数字识别/database/t10k-images-idx3-ubyte",ifstream::binary);
	int magic_number = 0;  
    int number_of_images = 0;  
    int n_rows = 0;  
    int n_cols = 0;
	file.read((char*)&magic_number, sizeof(magic_number));  
    file.read((char*)&number_of_images, sizeof(number_of_images));    
    file.read((char*)&n_rows, sizeof(n_rows));   
    file.read((char*)&n_cols, sizeof(n_cols)); 
    magic_number=ReverseInt(magic_number); 
    number_of_images=ReverseInt(number_of_images);
    n_rows=ReverseInt(n_rows);
    n_cols=ReverseInt(n_cols);
    
    //cout<<ReverseInt(magic_number)<<"       "<<ReverseInt(number_of_images)<<"      "<<ReverseInt(n_rows)<<"        "<<ReverseInt(n_cols)<<endl;
    
    for(int i=0;i<number_of_images;i++)
    {
        Mat tupian(n_rows,n_cols,CV_8UC1);
        string ss="image"+to_string(i);
        for(int j=0;j<n_rows;j++)
        {
            for(int k=0;k<n_cols;k++)
            {
                unsigned char temp=0;
                file.read((char*)&temp, sizeof(temp));
                tupian.at<unsigned char>(j,k)=(int)temp;
            }
        }
        ImageDataSet<<ss<<tupian;
        cout<<"保存第"<<i<<"张图片"<<endl;
    }
	file.close();
    ImageDataSet.release();
FileStorage ImageDataSet;//保存标签值
    ImageDataSet.open("/home/shensy/Code/c++/opencv3编程入门/手写数字识别/database/TestLabelDataSet.xml",FileStorage::WRITE);
    ifstream file;
	file.open("/home/shensy/Code/c++/opencv3编程入门/手写数字识别/database/t10k-labels-idx1-ubyte",ifstream::binary);
	int magic_number = 0;  
    int number_of_images = 0;  
    int n_rows = 0;  
    int n_cols = 0;
	file.read((char*)&magic_number, sizeof(magic_number));  
    file.read((char*)&number_of_images, sizeof(number_of_images));    
    magic_number=ReverseInt(magic_number); 
    number_of_images=ReverseInt(number_of_images);
    
    //cout<<ReverseInt(magic_number)<<"       "<<ReverseInt(number_of_images)<<"      "<<ReverseInt(n_rows)<<"        "<<ReverseInt(n_cols)<<endl;
    for(int i=0;i<number_of_images;i++)
    {
        string ss="label"+to_string(i);
        unsigned char temp=0;
        file.read((char*)&temp, sizeof(temp));
        ImageDataSet<<ss<<(int)temp;
        cout<<"保存第"<<i<<"个标签"<<endl;
    }

	file.close();
    ImageDataSet.release();



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值