Изменение размера изображения с помощью cv2 - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь изменить размер изображений, извлеченных из cifar10 в исходном формате 32x32 до 96x96 для использования с MobileNetV2, однако я сталкиваюсь с этой ошибкой.Пробовал различные решения, но ничего не работает.

Мой код:

for a in range(len(train_images)):
    train_images[a] = cv2.resize(train_images[a], dsize=(minSize, minSize), interpolation=cv2.INTER_CUBIC)

Ошибка, которую я получаю:

----> 8     train_images[a] = cv2.resize(train_images[a], dsize=(minSize, minSize), interpolation=cv2.INTER_CUBIC)
ValueError: could not broadcast input array from shape (96,96,3) into shape (32,32,3)

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Иногда вам нужно конвертировать изображение из RGB в оттенки серого.Если это проблема, единственное, что вы должны сделать, это gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY), изменить размер изображения , а затем снова resized_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2RGB)

Я никогда не сталкивался с этой ошибкой, но если первый вариантне работает, вы можете попытаться изменить размер изображения с помощью подушки следующим образом:

from PIL import Image

im = Image.fromarray(cv2_image)
nx, ny = im.size
im2 = im.resize((nx*2, ny*2), Image.LANCZOS)
cv2_image = cv2.cvtColor(numpy.array(im2), cv2.COLOR_RGB2BGR)

Вы можете превратить это в функцию и вызвать ее в списке.Я надеюсь, что это решит вашу проблему:)

0 голосов
/ 27 апреля 2019

В OpenCV есть несколько алгоритмов интерполяции.Например: -

  • INTER_NEAREST - интерполяция ближайшего соседа
  • INTER_LINEAR - билинейная интерполяция (используется по умолчанию)
  • INTER_AREA - повторная выборка с использованием отношения площади пикселя.Это может быть предпочтительный метод для прореживания изображений, так как он дает результаты без муаров.Но когда изображение увеличено, оно похоже на метод INTER_NEAREST.
  • INTER_CUBIC - бикубическая интерполяция по окрестности 4 × 4 пикселя
  • INTER_LANCZOS4 - интерполяция Ланцоша по окрестности 8 × 8 пикселя

Код:

image_scaled=cv2.resize(image,None,fx=.75,fy=.75,interpolation = cv2.INTER_LINEAR)
img_double=cv2.resize(image,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
image_resize=cv2.resize(image,(200,300),interpolation=cv2.INTER_AREA)
image_resize=cv2.resize(image,(500,400),interpolation=cv2.INTER_LANCZOS4)

Подробную информацию о реализации Python можно также найти здесь: Как изменить размер изображенияв OpenCV Python

0 голосов
/ 18 октября 2018

Это просто потому, что вы читаете изображение 32x32 из train_images и пытаетесь сохранить измененное изображение (96x96) в том же массиве, что невозможно!Попробуйте что-то вроде:

train_images_reshaped = np.array((num_images, 96, 96, 3))
for a in range(len(train_images)):
    train_images_reshaped[a] = cv2.resize(train_images[a], dsize=(minSize, minSize), interpolation=cv2.INTER_CUBIC)
...