版权声明:转载请声明 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)
现在,我们就可以拿任何的图片来创建自己的训练数据,然后来训练网络了。