转换cifar10文件为图片

import pickle
from pathlib import Path
import os
import matplotlib.pyplot as plt
from scipy import misc

dataset_dir = Path('D:/Data/cifar-10-batches-py/') #更改此处路径 path/to/you/cifar-10-batches-py


# 获取所需数据文件
def get_file_list(file_dir):
    file_list = []
    for i in os.listdir(str(file_dir)):
        if i.startswith('data'):
            file_list.append(i)
    return file_list

# 获取字典数据
def unpickle(file):
    with open(file,'rb') as p:
        dict = pickle.load(p, encoding='bytes')
        return dict

def show_pic(img):
    _, ax = plt.subplots()
    ax.imshow(img)
    plt.show()

if __name__ == '__main__':
    file_list = get_file_list(dataset_dir)

    for file in file_list:
        # print (file)

        # 解压数据
        data_dict = unpickle(str(dataset_dir / file))

        # label_name
        class_name = unpickle('D:/Data/cifar-10-batches-py/batches.meta') # 更改此处路径 path/to/you/batches.meta
        label_names = class_name[b'label_names']
        print(label_names[1])

        # 获取 data 和 labels
        data = data_dict[b'data'].reshape(10000, 3, 32,32)
        labels = data_dict[b'labels']


        # 转换shape 为 10000 x 3 x 32 x 32
        for i in range(len(data)):
            label = labels[i]
            # print(label)
            # print(data[i].shape)
            img = data[i].transpose((1, 2, 0))
            # # print(data)
            # plt.imshow(img)
            # plt.show()

            # save_dir = str()

            # 创建各个类文件夹
            if not os.path.exists(str(dataset_dir / ("%s"% label_names[label]))): # label_names[label] 可修改为 label
                os.mkdir(str(dataset_dir / ("%s"% label_names[label])))

            misc.imsave(str(dataset_dir / ("%s"% label_names[label]) / ('%s_%d.png' % (label, i))), img)

版权声明:本文为weixin_42063746原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。