Как изменить размер изображения, считываемого моей камерой в opencv? Модель машинного обучения показывает ошибку - PullRequest
0 голосов
/ 08 сентября 2018

Я использовал модель машинного обучения для обучения набора классификационных данных и использовал keras imagedatagenerator для дополнения. В программе (которая была фактически разветвлена) заданный размер был установлен на (300 300), но во время тестирования, когда я использую свою компьютерную камеру, она показывает следующую ошибку:

ValueError: Ошибка при проверке ввода: ожидалось, что conv2d_1_input будет иметь форму (300, 300, 1), но получил массив с формой (260, 300, 1)

Я не хочу снова обучать набор данных до целевого размера (260 300), так как это вызвало другие проблемы, так есть ли у opencv способ решить эту проблему, что-то вроде изменения размера? Программа opencv предназначена для видеозахвата.

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете использовать функцию изменения размера OpenCV:

resized_image = cv2.resize(image, (300, 300))

Это приведет к искажению изображения и может привести к снижению производительности вашей модели.

Ваш второй вариант - создать пустой массив numpy (заполненный нулями / единицами) размером 300x300 и разместить изображение в этом массиве. Таким образом, искажение изображения предотвращается.

Второй вариант:

output_img = np.ones((300, 300, 1)) * 128
output_img = (output_img).astype('uint8')

scale = 300 / (image.shape[0] * 1.0)
image_resize = cv2.resize(image, (0, 0), fx=scale, fy=scale, interpolation=cv2.INTER_LANCZOS4)

img_w = image_resize.shape[1]

if img_w < 300:
    #pad the image with values and make it 1:1 aspect ratio
    offset = img_w % 2
    output_img[:, int(300 / 2 - math.floor(img_w / 2)):int(300 / 2 + math.floor(img_w / 2) + offset), :] = image_resize

else:
    #crop the center of the image to maintain 1:1 aspect ratio
    output_img = image_resize[:,int(img_w / 2 - 300 / 2):
                  int(img_w / 2 + 300 / 2), :]
...