opencv和PIL的差异会影响模型预测

时间:2019-05-06 13:22:56

标签: opencv image-processing keras python-imaging-library conv-neural-network

我已经在Keras中训练了一个用于图像分类的模型。通过使用枕头加载图像来进行训练。在部署期间,将映像加载到opencv中,这会大大降低模型的准确性。我发现显示时枕和opencv加载的图像不同。

im = Image.open("cat.jpg")
plt.imshow(im)
plt.show()

enter image description here

img = cv2.imread('cat.jpg')
plt.imshow(img)
plt.show()

enter image description here

为解决此问题,我尝试将图像加载到opencv中并将其写入到临时文件中,然后将其加载到枕头中。

cv2.imwrite('cat2.jpg',img)
im1 = Image.open("cat2.jpg")
im == im1

输出

  

错误

我尝试将im1im都打印为数组,并将值完全不同。我必须在部署中使用opencv。无论如何,我可以保留模型的准确性吗?

1 个答案:

答案 0 :(得分:3)

这是OpenCV和PIL中通道顺序差异的问题。 PIL将图像加载为RGB,而OpenCV将图像加载为BGR。因此,用matplotlib显示图像时,蓝色和红色通道似乎已互换。

您可以使用RGB函数将OpenCV图像转换为cv2.cvtColor,如下所示:

img = cv2.imread('cat.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()