OpenCV считывает изображения в формате BGR, тогда как в керасе он представлен в 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)
Asпоследний момент, в зависимости от того, как вы тренировали свою модель, обычно принято нормализовать значения пикселей изображения до диапазона [0,1]
.Если вы сделали это с вашей моделью keras, убедитесь, что вы поделили свои значения на 255 в вашем изображении, считанном через OpenCV:
import numpy as np
# ...
# ...
test_image = (test_image[...,::-1].astype(np.float32)) / 255.0