mnist数据集是以二进制形式保存的,这里借助OpenCV把mnist数据集转换成图片格式。转换程序如下:

#include <iostream>
#include <fstream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp> using namespace cv;
using namespace std; int main()
{
//mnist数据存放路径
string train_test_image[2] = { "D:\\Software\\Caffe\\caffe-master\\data\\mnist\\mnist_train_lmdb\\train-images.idx3-ubyte",
"D:\\Software\\Caffe\\caffe-master\\data\\mnist\\mnist_test_lmdb\\t10k-images.idx3-ubyte" };
string train_test_label[2] = { "D:\\Software\\Caffe\\caffe-master\\data\\mnist\\mnist_train_lmdb\\train-labels.idx1-ubyte",
"D:\\Software\\Caffe\\caffe-master\\data\\mnist\\mnist_test_lmdb\\t10k-labels.idx1-ubyte" };
int label_num[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
//图片保存路径
string dir[2] = { "D:\\Software\\Caffe\\caffe-master\\data\\mnist\\mnist_train_image\\",
"D:\\Software\\Caffe\\caffe-master\\data\\mnist\\mnist_test_image\\" };
for (int iter = 0; iter < 2; iter++)
{
//读取label
ifstream fin_label(train_test_label[iter], ios::binary);
vector<int> label;
int magic_number;
fin_label.read((char *)(&magic_number), sizeof(magic_number));
int number_items;
fin_label.read((char *)(&number_items), sizeof(number_items));
while (!fin_label.eof())
{
char label_tmp;
fin_label.read((char *)&label_tmp, sizeof(label_tmp));
label.push_back(label_tmp);
} //读取图片
vector<Mat> image;
int width = 28, height = 28;
ifstream fin_image(train_test_image[iter], ios::binary);
int magic_number1;
fin_image.read((char *)(&magic_number1), sizeof(magic_number1));
int number_images;
fin_image.read((char *)(&number_images), sizeof(number_images));
int num_rows;
fin_image.read((char *)(&num_rows), sizeof(num_rows));
int num_columns;
fin_image.read((char *)(&num_columns), sizeof(num_columns));
while (!fin_image.eof())
{
unsigned char tmp;
Mat image_tmp(width, height, CV_8UC1);
for (int r = 0; r < image_tmp.rows; r++)
{
for (int c = 0; c < image_tmp.cols; c++)
{
fin_image.read((char *)&tmp, sizeof(tmp));
image_tmp.at<uchar>(r, c) = tmp;
}
}
image.push_back(image_tmp);
} for (int i = 0; i < label.size(); i++)
{
char clabel[10];
sprintf_s(clabel, "%d", label[i]);
string slabel = clabel;
char clabel_num[10];
sprintf_s(clabel_num, "%d", label_num[label[i]]);
string slabel_num = clabel_num;
string name = dir[iter] + slabel + "_" + slabel_num + ".jpg";
imwrite(name, image[i]);
//显示图片
imshow("mnist", image[i]);
waitKey(100);
label_num[label[i]]++;
}
}
return 0;
}

转换出来一共有60000个训练图片,10000个测试图片,部分训练图片:

下边使用OpenCV把训练图片的0~9的前10个图片显示出来:

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp> using namespace cv;
using namespace std; int main()
{
Mat MNIST = Mat(Size(289, 289), CV_8UC1, Scalar::all(255));
string mnistPath = "D:\\Software\\Caffe\\caffe-master\\data\\mnist\\mnist_train_image\\";
string mnistImagePath;
stringstream str;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
str.clear();
str << i;
string stri, strj;
str >> stri;
str.clear();
str << j;
str >> strj;
mnistImagePath = mnistPath + stri + "_" + strj + ".jpg";
Mat image = imread(mnistImagePath, 0);
Mat roi = MNIST(Rect(j * 28 + j, i * 28 + i, 28, 28));
addWeighted(roi, 0, image, 1, 0, roi);
imshow("mnist", MNIST);
}
waitKey();
}
}

执行结果:

使用OpenCV把二进制mnist数据集转换为图片的更多相关文章

  1. Python 把二进制mnist数据库转换为图片

    mnist数据库可以通过caffe里的get_mnist.sh文件下载,路径是: caffe-master/data/mnist/get_mnist.sh,get_mnist.sh内容如下: #!/u ...

  2. php从数据库中取二进制流文件转换为图片,图片以二进制流存入数据库实现

    php从数据库中取二进制流文件转换为图片,图片以二进制流存入数据库实现 function data_uri($contents, $mime) { $base64 = base64_encode($c ...

  3. Windows下mnist数据集caffemodel分类模型训练及测试

    1. MNIST数据集介绍 MNIST是一个手写数字数据库,样本收集的是美国中学生手写样本,比较符合实际情况,大体上样本是这样的: MNIST数据库有以下特性: 包含了60000个训练样本集和1000 ...

  4. Caffe系列4——基于Caffe的MNIST数据集训练与测试(手把手教你使用Lenet识别手写字体)

    基于Caffe的MNIST数据集训练与测试 原创:转载请注明https://www.cnblogs.com/xiaoboge/p/10688926.html  摘要 在前面的博文中,我详细介绍了Caf ...

  5. MNIST数据集转化为二维图片

    #coding: utf-8 from tensorflow.examples.tutorials.mnist import input_data import scipy.misc import o ...

  6. IOS 图片转换二进制 二进制转换为图片

    //类方法 图片 转换为二进制 +(NSData *)Image_TransForm_Data:(UIImage *)image { NSData *imageData = UIImageJPEGRe ...

  7. 深度学习原理与框架-Tensorflow基本操作-mnist数据集的逻辑回归 1.tf.matmul(点乘操作) 2.tf.equal(对应位置是否相等) 3.tf.cast(将布尔类型转换为数值类型) 4.tf.argmax(返回最大值的索引) 5.tf.nn.softmax(计算softmax概率值) 6.tf.train.GradientDescentOptimizer(损失值梯度下降器)

    1. tf.matmul(X, w) # 进行点乘操作 参数说明:X,w都表示输入的数据, 2.tf.equal(x, y) # 比较两个数据对应位置的数是否相等,返回值为True,或者False 参 ...

  8. OpenCV视频读取播放,视频转换为图片

    转载请注明出处!!! http://blog.csdn.net/zhonghuan1992 OpenCV视频读取播放,视频转换为图片 介绍几个有关视频读取的函数: VideoCapture::Vide ...

  9. C#程序中将图片转换为二进制字符串,并将二进制字符串转换为图片

    /// <summary> /// 将图片以二进制流 /// </summary> /// <param name="path"></pa ...

随机推荐

  1. 洛谷—— P1640 [SCOI2010]连续攻击游戏

    https://www.luogu.org/problem/show?pid=1640 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1, ...

  2. ORACLE-014:oracle中查看DBLinkpassword

    dblink在数据库中使用是比較多的,简单方便.只是随着oracle安全机制的加强.普通用户登录仅仅能看到,username以及连接字符串.那么dblinkpassword怎样查看呢? 非常easy. ...

  3. C. Amr and Chemistry(Codeforces Round #312 (Div. 2) 二进制+暴力)

    C. Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. 【笨木头Lua专栏】基础补充02:函数的几个特别之处

    没想到距离上一篇基础补充已经过了1年多了,近期准备捡回Lua,把基础都补补,今天来聊聊Lua的函数吧~ 0.环境 我突然对Lua又大感兴趣的最主要原因是,Cocos Code IDE開始浮出水面了,它 ...

  5. TS 函数解析

    ------------------------------------------------------------------------------------ 函数传参: //let myA ...

  6. php利用href进行页面传值的正确姿势

    首先在a.php中 <?php $a = "world"; echo "<a href='b.php?m=$a'>删除</a>"; ...

  7. Codeforces 701E Connecting Universities 贪心

    链接 Codeforces 701E Connecting Universities 题意 n个点的树,给你2*K个点,分成K对,使得两两之间的距离和最大 思路 贪心,思路挺巧妙的.首先dfs一遍记录 ...

  8. python 3.x 学习笔记8 (os模块及xml修改)

    1.os模块操作 os.getcwd():                                       # 查看当前所在路径. os.listdir(path):            ...

  9. Avalon.js 实现列表

    <table border="0" cellpadding="0" cellspacing="0" class="tab1& ...

  10. 【原创】使用Kettle的一些心得和经验

    用kettle做etl也有段时间了,遇到很多问题,总结了一下. [关于版本的问题] kettle常用的版本有4.1和4.4,对于4.1版本: 1.该版本的兼容性有点差,在某些机器上运行会启动失败,或者 ...