Разница в opencv и PIL, влияющая на прогноз модели - PullRequest
0 голосов
/ 06 мая 2019

Я обучил модель в Керасе классификации изображений. Тренинг проводился путем загрузки изображений с помощью подушки. Во время развертывания изображения загружаются в 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

выход

Ложная

Я попытался распечатать оба im1 и im в виде массивов, а значения совершенно разные. Я должен использовать OpenCV в развертывании. Есть ли способ сохранить точность модели?

1 Ответ

3 голосов
/ 06 мая 2019

Это проблема с разницей в порядке следования каналов в OpenCV и PIL. PIL загружает изображение как RGB, тогда как OpenCV загружается как BGR. Из-за этого синий и красный каналы, кажется, поменялись местами, когда вы показываете изображение с matplotlib.

Вы можете преобразовать изображение OpenCV в RGB, используя функцию cv2.cvtColor следующим образом:

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