比较使用ImageDataGenerator()和cv2.imread()加载的数据



我是图像分类的新手。我建立了一个模型来对狗和猫进行分类,并将模型保存为h5文件。对于训练,使用ImageDataGenerator()加载数据。为了进行测试,我使用cv2.imread()来加载数据。为了确认,我只是使用这两种方法加载了一个图像,并检查了输出。但是我得到的数组与我从ImageDataGenerator()得到的数组相反。我正在张贴代码并输出

train_image_generator = ImageDataGenerator()
test_data=train_image_generator.flow_from_directory(batch_size=batch_size,directory='/home/josin/my_projects/test1',shuffle=True,target_size=(150, 150),class_mode='binary')
print(test_data[0][0])`

上述代码的输出为

找到属于1类的1个图像

array([[[[203., 164.,  87.]
[209., 170.,  93.],
[209., 170.,  93.],
...,
[247., 206., 124.],
[244., 204., 119.],
[240., 201., 122.]],
...,
[  2.,   2.,   0.],
[  2.,   2.,   0.],
[  2.,   2.,   0.]]]], dtype=float32)`

使用`cv2.imread((的代码是:

img_array = cv2.imread('/home/josin/my_projects/test1/cat/cat.0.jpg')
new_array = cv2.resize(img_array,(150,150))
new_array.reshape(1,150,150,3)`

并且上述代码的输出是

array([[[[ 87, 164, 203],
[ 92, 169, 208],
[ 93, 170, 209],
...,
[124, 206, 247],
[119, 203, 245],
[122, 201, 240]],
...,
[  0,   2,   2],
[  0,   2,   2],
[  0,   2,   2]]]], dtype=uint8)

使用cv2.imread()时像素值发生了反转。我引用的大多数文章和帖子都使用cv2.imread()。将此输入提供给保存的模型正确吗?有没有其他方法可以加载图像以用于模型

cv2.imread按如下方式排列图像通道:b, g, r。同时,ImageDataGenerator将信道排列为r, g, b。这就解释了你提到的inverse效应。

只需调用:img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)即可将opencv图像排列为r, g, b

最新更新