我已经在Keras中训练了一个用于图像分类的模型。通过使用枕头加载图像来进行训练。在部署期间,将映像加载到opencv中,这会大大降低模型的准确性。我发现显示时枕和opencv加载的图像不同。
im = Image.open("cat.jpg")
plt.imshow(im)
plt.show()
img = cv2.imread('cat.jpg')
plt.imshow(img)
plt.show()
为解决此问题,我尝试将图像加载到opencv中并将其写入到临时文件中,然后将其加载到枕头中。
cv2.imwrite('cat2.jpg',img)
im1 = Image.open("cat2.jpg")
im == im1
输出
错误
我尝试将im1
和im
都打印为数组,并将值完全不同。我必须在部署中使用opencv。无论如何,我可以保留模型的准确性吗?
答案 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()