opencv把图片转换成二进制_使用OpenCV把二进制mnist数据集转换为图片

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

#include

#include

#include

#include

#include

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 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 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(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

#include

#include

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();

}

}

执行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值