定义函数read_img(),读取文件夹“photo”中“0”到“9”的图像

2021-09-24 14:25:48 浏览数 (2)

定义函数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)

0 人点赞