定义函数read_img(),读取文件夹“photo”中“0”到“9”的图像
- 调用cv2.imread()函数循环获取每张图片的所有像素值,并通过
cv2.resize()统一修改为32*32大小
- 依次获取图像像素、图像类标和图像路径名称:fpaths, data, label = read_img(path)
- 将图像的顺序随机调整,并按照2-8比例划分数据集,其中80%的数据用于训练,20%的数据用于测试
代码语言:javascript
复制#---------------------------------第一步 读取图像-----------------------------------
def read_img(path):
cate = [path x for x in os.listdir(path) if os.path.isdir(path x)]
imgs = []
labels = []
fpath = []
for idx, folder in enumerate(cate):
# 遍历整个目录判断每个文件是不是符合
for im in glob.glob(folder '/*.jpg'):
#print('reading the images:%s' % (im))
img = cv2.imread(im) #调用opencv库读取像素点
img = cv2.resize(img, (32, 32)) #图像像素大小一致
imgs.append(img) #图像数据
labels.append(idx) #图像类标
fpath.append(path im) #图像路径名
#print(path im, idx)
return np.asarray(fpath, np.string_), np.asarray(imgs, np.float32), np.asarray(labels, np.int32)
# 读取图像
fpaths, data, label = read_img(path)
print(data.shape) # (1000, 256, 256, 3)
# 计算有多少类图片
num_classes = len(set(label))
print(num_classes)
# 生成等差数列随机调整图像顺序
num_example = data.shape[0]
arr = np.arange(num_example)
np.random.shuffle(arr)
data = data[arr]
label = label[arr]
fpaths = fpaths[arr]
# 拆分训练集和测试集 80%训练集 20%测试集
ratio = 0.8
s = np.int(num_example * ratio)
x_train = data[:s]
y_train = label[:s]
fpaths_train = fpaths[:s]
x_val = data[s:]
y_val = label[s:]
fpaths_test = fpaths[s:]
print(len(x_train),len(y_train),len(x_val),len(y_val)) #800 800 200 200
print(y_val)