批量读取文件夹下的图片并保存在一个四维数组中

版权声明:转载请声明 https://blog.csdn.net/weixin_42451919/article/details/84103077

在深度学习开发中,我们在网上找的现成的数据集,都是已经处理好了的,我们直接使用即可。但是如果我们想用自己的图片训练网络,会发现编译器总是报读入图片的shape大小不一致的情况。

在用来训练的图片数组中,一般都是四维的,比如(600,299,299,3),600表示在这个数组中一共有600张图片,299则是图片的宽高,3表示图片是彩色的。现在,我们来把自己文件夹下的所有的图片都读到一个数组中,并拥有类似的shape。

import numpy
import os
from PIL import Image   #导入Image模块
from pylab import *     #导入savetxt模块

def get_imlist(path):   #此函数读取特定文件夹下的jpg格式图像,返回图片所在路径的列表

    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]

c=get_imlist(r"D:\BaiduNetdiskDownload\train_3")    #r""是防止字符串转译
print (c)     #这里以list形式输出jpg格式的所有图像(带路径)
d=len(c)    #这可以以输出图像个数,如果你的文件夹下有698张图片,那么d为698
print("图片个数:",d)


data=numpy.empty((d,299,299,3)) #建立d*(299,299,3)的矩阵
while d>0:
    img=Image.open(c[d-1])  #打开图像

    #img_ndarray=numpy.asarray(img)
    img_ndarray=numpy.asarray(img,dtype='float64')/255  #将图像转化为数组并将像素转化到0-1之间
    print(img_ndarray.shape)
    data[d-1]=img_ndarray    #将图像的矩阵形式保存到data中
    d=d-1
print ("data.shape:",data.shape)

现在,我们就可以拿任何的图片来创建自己的训练数据,然后来训练网络了。

猜你喜欢

转载自blog.csdn.net/weixin_42451919/article/details/84103077