当年做作业时候 没搜到能让作为代码小白的我能看懂的。左抄右抄也凑不出题目要求的结果。😥
现在整理一份最终的代码。希望能对大家学习python有帮助~💪
一、题目
1、分别将 CIFAR-10 数据集 中训练集与测试集中的图片分类,分类后将每个类别输出存放在一个文件夹中,并将文件夹名称改为该类别名称,每类文件夹内的图片名字格式为“类别名.序号.jpeg”
2.每个类别随机选出10张图片组合成一张大图,生成4张大图,且4张大图中 相同类别的小图片各不重复。
二、完整代码
直接无脑复制即可👍🏼
记得改文件位置
1.分类并保存至文件夹
import os
from imageio import imsave
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
# 训练集
filename = '文件位置\cifar-10-batches-py' # 图片的路径
meta = unpickle(filename + '/batches.meta')
label_name = meta[b'label_names']
print(label_name) #打印标签
for i in range(len(label_name)): #建立文件夹train
file = label_name[i].decode()
path = '文件位置/train/' + file
isExist = os.path.exists(path)
if not isExist:
os.makedirs(path)
for i in range(1, 6):
content = unpickle(filename + '/data_batch_' + str(i)) # 解压后的每个data_batch_
for j in range(10000):
img = content[b'data'][j]
img = img.reshape(3, 32, 32)
img = img.transpose(1, 2, 0)
img_name = '文件位置/train/' + label_name[content[b'labels'][j]].decode() + '/batch_' + str(i) + '_num_' + str(j) + '.jpeg'
imsave(img_name, img)
# 训练集改名
path = '文件位置/train/'
filelist = os.listdir(path)
for item in filelist:
pathnew=os.path.join(path,item)
imagelist = os.listdir(pathnew)
j = 1
for i in imagelist:
src = os.path.join(os.path.abspath(pathnew), i)
dst = os.path.join(os.path.abspath(pathnew), '' + item + '.' + str(j) + '.jpeg')
j = j+1
os.rename(src, dst)
# 测试集
meta1 = unpickle(filename + '/test_batch') # 解压test_batch
label_name1 = meta[b'label_names']
for i in range(len(label_name1)):
file = label_name1[i].decode()
path = '文件位置/test/' + file
isExist = os.path.exists(path)
if not isExist:
os.makedirs(path)
for j in range(10000):
img = meta1[b'data'][j]
img = img.reshape(3, 32, 32)
img = img.transpose(1, 2, 0)
img_name = '文件位置/test/' + label_name[
meta1[b'labels'][j]].decode() + '/batch_' + str(j) + '_num_' + str(j) + '.jpeg'
imsave(img_name, img)
# 测试集改名
path = '文件位置/test/'
filelist = os.listdir(path)
for item in filelist:
pathnew=os.path.join(path,item)
imagelist = os.listdir(pathnew)
j = 1
for i in imagelist:
src = os.path.join(os.path.abspath(pathnew), i)
dst = os.path.join(os.path.abspath(pathnew), '' + item + '.' + str(j) + '.jpeg')
j = j+1
os.rename(src, dst)
结果
2.组合图片
import os
# from scipy.misc import imsave
from imageio import imsave
from PIL import Image
from PIL import ImageDraw, ImageFont
# 组合图片
IMAGE_SIZE = 32 # 每张小图片的大小
IMAGE_ROW = 10 # 行数
IMAGE_COLUMN = 10 # 列数
IMAGE_SPACE = 10 #图片间隙
path = '文件位置/train/'
filelist = os.listdir(path)
for i in range(4): #生成4张
to_image = Image.new('RGB', (430, 430), '#E6E6FA') # 创建一个新图,设置大小和背景色
for j in range(IMAGE_ROW):
pathnew=os.path.join(path, filelist[j])
imagelist = os.listdir(pathnew)
for k in range(IMAGE_COLUMN):
from_image = Image.open(os.path.join(pathnew,imagelist[k + i*30]))
to_image.paste(from_image, (10+k * (IMAGE_SPACE + IMAGE_SIZE), 10+j * (IMAGE_SPACE + IMAGE_SIZE)))
to_image.save('文件位置/tupian' + str(i+1) + '.jpeg')
结果