资源简介

mnist手写字符集(0-9),已经将idx3-ubyte格式数据提取为jpg图片,方便学习研究深度学习和字符识别使用

资源截图

代码片段和文件信息

//下面的代码将mnist官网上的数据转化为图片
//依赖C++11和opencv
#include
#include
#include
#include
#include

using namespace std;

inline int to_int (const void*data)
{
    unsigned char* ptr = (unsigned char*) data;
    int result = 0;
    
    for (int i = 3; i >= 0; i--)
    {
        result +=  ptr[i] * pow (256 3 - i);
    }
    
    return result;
}

int main()
{
    const string mnist_data_path (R“(F:\libs\caffe\data\mnist\t10k-images-idx3-ubyte)“);
    const string mnist_label_path (R“(F:\libs\caffe\data\mnist\t10k-labels-idx1-ubyte)“);
    const string dst_img_dir (R“(F:\libs\caffe\data\mnist\test_10000)“);
    FILE * f_data_handle = fopen (mnist_data_path.c_str() “rb“);
    FILE * f_label_handle = fopen (mnist_label_path.c_str() “rb“);
    fseek (f_label_handle 8 SEEK_SET);
    char buff[4];
    fread ( (void*) &buff 4 1 f_data_handle);
    int magic_num = to_int (buff);
    fread ( (void*) &buff 4 1 f_data_handle);
    int num_imgs = to_int (buff);
    fread ( (void*) &buff 4 1 f_data_handle);
    int num_rows = to_int (buff);
    fread ( (void*) &buff 4 1 f_data_handle);
    int num_cols = to_int (buff);
    cv::Mat img_buf (num_rows num_cols CV_8U cv::Scalar (0));
    assert (img_buf.isContinuous());
    unsigned char* pixel_ptr = img_buf.ptr (0);
    int count_all = -1;
    map count_one;
    
    for (int i = 0; i < num_imgs; i++)
    {
        if (i % 1000 == 0) { cout << i << endl; }
        
        unsigned char label = fgetc (f_label_handle);
        count_all++;
        count_one[label]++;
        
        for (int j = 0; j < num_rows * num_cols; j++)
        {
            pixel_ptr[j] = fgetc (f_data_handle);
        }
        
        cv::imwrite (dst_img_dir + “\\“ + (to_string (label) + “_“ + to_string (count_one[label]) + “_“ + to_string (count_all) + “.jpg“) img_buf);
        //cv::imshow (“HH“ img_buf);
        //cv::waitKey (1);
    }
}

评论

共有 条评论