区别
from keras.preprocessing import image
img = image.load_img(img_path)
img = image.img_to_array(img_path) # R,G,B
–
import cv2 as cv
img_cv = cv.imread(img_path) #b,g,r
–
from skimage import io
img_ski = io.imread(img_path) # r,g,b
img == img_cv
–
#r, g, b == b , g, r
#False True False
转换
OpenCV以BGR格式读取图像,而在keras中,它以RGB表示。要使OpenCV版本符合我们期望的顺序(RGB),只需反转通道:
test_image = cv2.imread(‘trick.png’)
test_image = cv2.resize(test_image, (64, 64))
test_image = test_image[…,::-1] # Added这里是引用
最后一行将通道反转为RGB顺序。然后,你可以将其提供给你的keras模型。
我想补充的另一点是,cv2.imread通常会在uint8精确地读取图像。检查keras加载图像的输出,你可以看到数据是浮点精度,因此你可能还希望转换为浮点表示,例如float32:
import numpy as np
…
…
test_image = test_image[…,::-1].astype(np.float32)这里是引用
最后一点,根据你训练模型的方式,通常习惯将图像像素值标准化为一个[0,1]范围。如果你使用keras模型执行此操作,请确保在通过OpenCV读入的图像中将值除以255:
import numpy as np
…
…
test_image = (test_image[…,::-1].astype(np.float32)) / 255.0