欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mnist数据集转存csv文件,csv文件图像可视化

程序员文章站 2022-06-23 10:54:01
MNIST数据集转换格式成csv文件本小宝也是因为需求,需要跨一下研究领域,因为之前都是处理的csv文件(即所研究对象提取的特征姨csv文件进行存储)没有怎么接触过处理图像数据,所以一接触起来有点不知所措。搜集了很多资料,发现都不适合我,最后我就转变了思路,那就把图像数据转成csv文件不就好了。接下来我将介绍一下我的操作流程。1.使用的公开MNIST数据集的样子,MNIST数据集的下载大家可以搜一下会有很多小宝贝们为大家提供下载 链接。下载后的MNIST数据集与解压之后的样子如下图所示:2.MNIS...

MNIST数据集转换格式成csv文件
本小宝也是因为需求,需要跨一下研究领域,因为之前都是处理的csv文件(即所研究对象提取的特征姨csv文件进行存储)没有怎么接触过处理图像数据,所以一接触起来有点不知所措。搜集了很多资料,发现都不适合我,最后我就转变了思路,那就把图像数据转成csv文件不就好了。接下来我将介绍一下我的操作流程。
1.使用的公开MNIST数据集的样子,MNIST数据集的下载大家可以搜一下会有很多小宝贝们为大家提供下载 链接。下载后的MNIST数据集与解压之后的样子如下图所示:
Mnist数据集转存csv文件,csv文件图像可视化
2.MNIST数据集转csv文件。大家下载到MNIST数据集并解压之后,我们就可以将MNIST数据集进行转换了,转换之后存在csv中的格式是什么样子的呢。由于MNIST数据集中每一个图像是28*28的,所以转换成csv就是由784数字构成的一串数字,存在csv文件的一行中,且一行中的最后一个数字为该图像的标签。实现转换的代码如下:

# -*- coding: utf-8 -*-
def convert(imgf, labelf, outf, n):
    f = open(imgf, "rb")
    o = open(outf, "w")
    l = open(labelf, "rb")

    f.read(16)
    l.read(8)
    images = []

    for i in range(n):
        image = [ord(l.read(1))]
        for j in range(28 * 28):
            image.append(ord(f.read(1)))
        images.append(image)

    for image in images:
        o.write(",".join(str(pix) for pix in image) + "\n")
    f.close()
    o.close()
    l.close()


convert("E:\\new_life_202009\MNIST\\train-images.idx3-ubyte", "E:\\new_life_202009\MNIST\\train-labels.idx1-ubyte",
        "E:\\new_life_202009\MNIST\mnist_train.csv", 60000)
convert("E:\\new_life_202009\MNIST\\t10k-images.idx3-ubyte", "E:\\new_life_202009\MNIST\\t10k-labels.idx1-ubyte",
        "E:\\new_life_202009\MNIST\mnist_test.csv", 10000)

print("Convert Finished!")

3.存为csv格式MNIST数据的可视化。小宝贝们的需求可能和我一样,不能只是把数据转换成csv就可以的,要是偶尔需要可视化一下结果,转成csv格式如何可视化呢?不用着急,本小宝已经为大家考虑到这个问题了,所以提供了解决代码,如下所示:

import numpy
import csv
from PIL import Image
import numpy as np
import random
import string
import os
def getdata(sourceFolder):  #读取csv中的数据
    data = []
    feature = []
    csv_file = csv.reader(open(sourceFolder))
    for content in csv_file:
        content = list(map(float, content))
        if len(content) != 0:
            data.append(content)
            feature.append(content[0:748])
    return feature

def generate_random_str(): #随机生成一个字符串,目的是为生成的图像命名
    '''
    string.digits = 0123456789
    string.ascii_letters = 26个小写,26个大写
    '''
    str_list = random.sample(string.digits + string.ascii_letters, 20)
    random_str = ''.join(str_list)
    return random_str


if __name__ == '__main__':
    datapath = r'E:\new_life_202009\mnist.csv'
    saveimgpath = r'E:\new_life_202009\test'
    feature= getdata(datapath)
    print('feature:', feature)
    for i in feature:
        b = numpy.array(i).reshape(28,28)  # reshape(列的长度,行的长度)
        img = Image.fromarray(np.uint8(b))
        imgname = generate_random_str()
        #img.show() 
        img.save(os.path.join(saveimgpath, '%s.jpg' % imgname))

是不是很完美。

本文地址:https://blog.csdn.net/littlle_yan/article/details/108959899