import os
import glob
import numpy as np
import cv2
classification = ['airplane',
'automobile',
'bird',
'cat',
'deer',
'dog',
'frog',
'horse',
'ship',
'truck']
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
#数据集的文件地址
folders = '/home/wy/Desktop/data_manager/data/cifar-10-batches-py'
#利用glob获取对应文件夹下的文件序列
trfiles = glob.glob(folders + "/data_batch*")
data = []
labels = []
for file in trfiles:
#利用官方提供的python3解压代码获取文件数据,返回值是字典类型的
dt = unpickle(file)
data += list(dt[b"data"])
labels += list(dt[b"labels"])
#print(data)
#
#将数据列表转化成图片格式,-1 表示图片的数量,3表示图像的通道数,32表示图片的大小
imgs = np.reshape(data, [-1, 3, 32, 32])
#
for i in range(imgs.shape[0]):
#获取第i张图片的数据
im_data = imgs[i, ...]
#opencv的通道维度在后面,所以需要进行通道维度的跟换
im_data = np.transpose(im_data, [1, 2, 0])
#将rgb图片转化成bgr图片
im_data = cv2.cvtColor(im_data, cv2.COLOR_RGB2BGR)
#根据不同的类别,生成不同类别的路径
f="{}/{}".format("data/image/train",classification[labels[i]])
if not os.path.exists(f):
os.mkdir(f)
#利用opencv写图片的方式生成图片,并按照图片的次序给图片命名
cv2.imwrite("{}/{}.jpg".format(f, str(i)), im_data)
将python3的cifar10数据集解压出来放到对应的文件夹,利用上面代码将数据集解析出来