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

Har*_*nan 2 opencv image-processing python-imaging-library conv-neural-network keras

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

im = Image.open("cat.jpg")
plt.imshow(im)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

img = cv2.imread('cat.jpg')
plt.imshow(img)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

cv2.imwrite('cat2.jpg',img)
im1 = Image.open("cat2.jpg")
im == im1
Run Code Online (Sandbox Code Playgroud)

输出

错误的

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

sga*_*zvi 5

这是OpenCV和PIL中通道顺序差异的问题。PIL 加载图像为,RGB而 OpenCV 加载为BGR. 因此,当您使用 来显示图像时,蓝色和红色通道似乎交换了matplotlib

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

img = cv2.imread('cat.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()
Run Code Online (Sandbox Code Playgroud)