1、预处理图片数据集
(1)增强数据集
如果图片数量少的话,可以通过keras.preprocessing.image中的ImageDataGenerator函数进行数据增强,即通过旋转,翻转等操作增加图片的数量。(训练集和测试集都要)
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
from PIL import Image
import os
datagen = ImageDataGenerator(
rotation_range=0.2,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
def generator(filepath):
images = os.listdir(filepath) # 把该路径下所有图片都读取
for name in images:
#读取每一张图片,并转化成矩阵
img=Image.open('picture/test/horse/'+name)
x=img_to_array(img)
x=x.reshape((1,)+x.shape)
i = 0
for batch in datagen.flow(x,
batch_size=1,
save_to_dir='test_augmentation/horse',#生成后的图像保存路径
save_prefix='3', #生成图片名称的前缀(用于作为数据的标签)
save_format='jpg'): #图片保存的格式
i += 1
if i > 20: #这个20指出要扩增多少个数据
break # otherwise the generator would loop indefinitely
generator('picture/test/horse')
(2)将图片裁剪成统一的形状,以便于输入到神经网络中
os.listdir(’ 文件夹名称’)函数用于遍历文件夹中文件的名称
def convertjpg(jpgfile,outdir,width=100,height=100):
#导入图片名称为jpgfile,输出到outdir文件中
img=Image.open('test_augmentation/'+jpgfile)
try:
#将图片resize成100*100的大小
new_jpg=img.resize((width,height),Image.BILINEAR)
#保存到路径outdir下
new_jpg.save(os.path.join(outdir,os.path.basename(jpgfile)))
except Exception as e:
print(e)
for jpgfile in os.listdir('test_augmentation'):
#遍历文件中的文件名称
print(jpgfile)
convertjpg(jpgfile,'test1')
(3)改变图片的名称
通过os.rename(‘旧名字’,‘新名字’)