Почему CV2 не читает изображения? - PullRequest
0 голосов
/ 28 марта 2020

У меня есть набор тренировочных изображений и тестовых изображений. То, что я хочу сделать, это вставить тренировочные изображения и изменить их размер до размера 150x150. Затем, в зависимости от имени класса файла изображения, добавьте метку к массиву y, который является моим массивом меток.

Однако я получаю это сообщение об ошибке:

OpenCV(4.2.0) /io/opencv/modules/imgproc/src/resize.cpp:4045: error: (-215:Assertion failed) !ssize.empty() in function 'resize'

Соответствующая часть моего кода выглядит следующим образом:

nrows = 150
ncolumns = 150
channels = 3

def read(imgarray):
    x = []
    y = []

    for image in imgarray:
        try:
            x.append(cv2.resize(cv2.imread(image, cv2.IMREAD_COLOR), (nrows,ncolumns), interpolation=cv2.INTER_CUBIC))
        except Exception as e:
            print(str(e))
        if 'chicken' in image:
            y.append(0)
        elif 'cat' in image:
            y.append(1)
        elif 'scoop' in image:
            y.append(2)

    return x,y
x,y = read(train_images) #train_images is composed of ~5400 images, of mixed sizes and image formats

Может кто-нибудь сказать мне, почему CV2 не «видит» изображения и как я могу изменить размеры изображений?

edit: пример изображения с именем '../input/train/train/chicken (1438) .jpg' и формой изображения (340 594, 3)

Я использую ядро ​​Kaggle, где мой обучающие изображения и тестовые изображения хранятся в каталоге под названием «вход». Обучающие изображения находятся во входных данных / train / train / img.jpg, а тестовые изображения - во входных данных / test / img2.jpg.

Обновление: когда я пытался отобразить изображения в train_images:

for image in imgarray:
        #print(image)
        image = mpimg.imread(image)
        showplot = plt.imshow(image)

Я получил эту ошибку:

<built-in function imread> returned NULL without setting an error

, что странно, поскольку предыдущий код работал отлично, отображая изображения:

import matplotlib.image as mpimg
for i in train_images[0:3]:
    img=mpimg.imread(i)
    imgplot = plt.imshow(img)
    plt.show()

Обновление: при выводе изображений, которые вызывают я получаю сообщение об ошибке:

Please check this image, has some issues ../input/train/train/scoop (1360).jpg
OpenCV(4.2.0) /io/opencv/modules/imgproc/src/resize.cpp:4045: error: (-215:Assertion failed) !ssize.empty() in function 'resize'

, поэтому кажется, что изображение, которое должно работать, по какой-то причине не работает enter image description here

Это один из изображения, которые выдавали ошибку: enter image description here

1 Ответ

0 голосов
/ 28 марта 2020

Просто игнорируйте изображения с проблемами.

То, как вы добавляете ярлыки, даже если некоторые изображения пропущены, ярлыки будут добавлены в массив.

nrows = 150
ncolumns = 150
channels = 3

def read(imgarray):
    x = []
    y = []

    for image in imgarray:
        try:
            im = cv2.resize(cv2.imread(image), (nrows,ncolumns)
            x.append(im)
            print(type(im))
            print(im.shape)
            if 'chicken' in image:
                y.append(0)
            elif 'cat' in image:
                y.append(1)
            elif 'scoop' in image:
                y.append(2)
        except Exception as e:
            print(str(e))
            print(f'Please check this image, has some issues {image}')


    return x,y

x,y = read(train_images) #train_images is composed of ~5400 images, of mixed sizes and ima
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...