我是图像分类的新手。我建立了一个模型来对狗和猫进行分类,并将模型保存为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