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. POJ 3744

    矩阵快速乘求概率,不难.但有注意的一点是,一定要注意地雷连着的情况,一旦出现两个雷相邻,就必定为0了. #include <iostream> #include <algorithm ...

  2. HDU 4331 Contest 4

    一个很直观的想法是,求出每个点上下左右能到达的最大长度.然后枚举其斜边...没想到过了.... 当然,题解有一个很巧妙的优化,利用树状数组,那个太巧妙了. #include<iostream&g ...

  3. cocos2d-js 热更新具体解释(一)

    本文将会具体解说cocos2d-js下的热更新机制.这篇内容先给大家介绍一下两个manifest文件就当热身了. 首先介绍project.manifest:  举个样例 { "package ...

  4. spring web mvc第一天

    spring  web mvc 感觉就是高大上啊!啥都是配置文件就能够了.所以第一步就是弄清楚配置文件使用和总体框架的流程! Spring web mvc最重要的当然是Controller,也就是首先 ...

  5. JAVA设计模式之【策略模式】

    策略模式 定义一些独立的类来封装不同的算法 类似于common方法或者引用类 角色 环境类Context 抽象策略Strategy 具体策略ConcreteStrategy 重构伴随着设计模式 重构类 ...

  6. oracle 11g rac for linux add node (oracle 11g rac 节点添加)

    说明: Adding Oracle RAC to Nodes with Oracle Clusterware Installed步骤来自ORACLE 官方文档: https://docs.oracle ...

  7. [转]m3u8直播测试地址

    http://www.cnblogs.com/yuandaozhe/p/5755453.html 调试m3u8的时候需要测试地址 找了几个,备用一下 安徽卫视 http://stream2.ahtv. ...

  8. CentOS_mysql8.0_错误

    #参考资料 CSND:https://blog.csdn.net/y_server/article/details/78781177 博客园:http://www.cnblogs.com/testwa ...

  9. 你不知道的JavaScript(十)with关键字

    with关键字在JavaScript中不太常用,用来定义一个和对象相关的作用域,在该作用域中可以访问对象的属性或方法而前面无需加上对象名,以达到简化代码的目的. <script type=&qu ...

  10. (转载)10个实用的但偏执的Java编程技术

    10个实用的但偏执的Java编程技术 在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常.因为,你知道的…… 作者:小峰来源:码农网|2015-09- ...