Ошибка при изменении размера изображения: «ошибка: (-215: утверждение не выполнено) func! = 0 в функции« изменить размер »» - PullRequest
1 голос
/ 30 марта 2019

Я пытаюсь предварительно обработать набор данных изображений (mnist), представленный в виде массива фигур (33600, 784), с изображениями формы (28, 28) путем изменения их масштаба до (10, 10).Я написал для этого функцию:

def resize_dataset(images):
    resized_images = []
    for img in images:
            img = img.reshape((28,28))
            resized_img = cv2.resize(img, dsize=(10, 10))
            resized_images.append(resized_img)
    return numpy.array(resized_images)

Но когда я на самом деле пытаюсь их перемасштабировать

x_tr_resc = resize_dataset(x_tr)

, я получаю следующую ошибку:

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-38-fc680e0206f0> in <module>()
----> 1 x_tr_resc = resize_dataset(x_tr)

<ipython-input-37-bd0b64255821> in resize_dataset(images)
      6     for img in images:
      7             img = img.reshape((28,28))
----> 8             resized_img = cv2.resize(img, dsize=(10, 10))
      9             resized_images.append(resized_img)
     10     return numpy.array(resized_images)

error: OpenCV(4.0.0) /io/opencv/modules/imgproc/src/resize.cpp:3662: error: (-215:Assertion failed) func != 0 in function 'resize'

Я пыталсячтобы погуглить эту ошибку, но нашли только людей с одинаковой ошибкой, пишущих на c ++, которые делают совсем другие вещи, например: изменить размер изображения и изменить его глубину и это: http://answers.opencv.org/question/19715/error-215-func-0-in-function-convertto/

Что я делаю не так?

1 Ответ

5 голосов
/ 30 марта 2019

О, я действительно понял это.Изображения в наборе данных были типа numpy.int64.Мне просто нужно было преобразовать изображения в float32, например:

def resize_dataset(images):
    resized_images = []
    for img in images:
            img = img.reshape((28,28)).astype('float32')  # <-- convert image to float32
            resized_img = cv2.resize(img, dsize=(10, 10))
            resized_images.append(resized_img)
    return numpy.array(resized_images)

И теперь все работает хорошо.Похоже, cv2.resize не может работать с изображениями, представленными в int.Надеюсь, это кому-нибудь поможет

...