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. ZOJ 3329

    方程很明显有 d[i]=sum(pk*d[i+k])+p0*d[0]; 其中pi可以在开始时枚举求出. 设d[i]=A[i]*d[0]+B[i], 代入上式 d[i]=(sum(pk*A[i+k])+ ...

  2. objective-c訪问控制符

    objective-c中成员变量的四个訪问控制符: @private:仅仅有当前类的内部才干訪问 @public:全部人都可訪问 @protected:仅仅限当前类和它的子类可以訪问 @package ...

  3. Solaris 10 改ip參考文档之二

    參考自:Cannot change IP address of Solaris[TM] 10 host (Doc ID 1007942.1) 本文不做翻译.全文转载. Symptoms Changin ...

  4. 非典型的scala程序及其编译后的结果

    初学Scala Folder structure以及部分代码 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2xldmVyd3lx/font/5a6L5L ...

  5. jqMobi(App Framework)入门学习(一)

    jqMobi(App Framework)入门学习(一) 1. 什么是jqMobi? jqMobi是由appMobi针对HTML5浏览器和移动设备开发的javascript框架.是个极其高速的查询选择 ...

  6. C 语言运算符优先级(记忆口诀)

    优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右   () 圆括号 (表达式)/函数名(形參表)   . 成员选择(对象) 对象.成员名   -& ...

  7. bzoj3444: 最后的晚餐(并查集+组合数学)

    3444: 最后的晚餐 题目:传送门 题解: 考虑有解的情况: 直接上并查集,同一个联通块里的人一定要坐在一起的.不难发现其实对于每个联通块最多就只有两种排列方式,那就直接把大于等于两个人的联通块先去 ...

  8. (四)Hystrix容错保护

    Feign默认是整合了Ribbon和Hystrix这两个框架,所以代码我们在上一篇的基础上进行修改,启动Eureka,service-hello,Feign 所谓的熔断机制和日常生活中见到电路保险丝是 ...

  9. (二)Ribbon(负载均衡的客户端)+Rest

    前面讲了服务的注册与发现,微服务项目会把项目的各个业务需求划分成几个模块来单独提供服务,各服务间的调用都是采用Http Restful来实现,但是在SpringClound中服务间的调用有两种方式:一 ...

  10. 寻找两个有序数组的中位数 C++实现leetcode系列(四)

    给定两个大小为 m 和 n 的有序数组 nums1和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不 ...