Ошибка изображения CV2: ошибка: (-215: утверждение не выполнено)! Ssize.empty () в функции 'cv :: resize' - PullRequest
2 голосов
/ 04 октября 2019

Я делаю классификатор изображений с помощью TensorFlow и Python, но у меня возникает ошибка при чтении изображений с помощью CV2. Я очень новичок в CV2, и я не смог найти ничего, что в достаточной степени решило бы мою проблему. Может кто-нибудь объяснить, как решить эту проблему?

def train_data_with_label():
  train_images = []
  for i in tqdm(os.listdir(train_data)):
    path = os.path.join(train_data, i)
    img = cv2.imread(path, 3)
    img = cv2.resize(img, (64,64))
    train_images.append([np.array(img), one_hot_label(i)])
  shuffle(train_images)
  return train_images

def test_data_with_label():
  test_images = []
  for i in tqdm(os.listdir(test_data)):
    path = os.path.join(test_data, i)
    img = cv2.imread(path, 3)
    img = cv2.resize(img, (64,64))
    test_images.append([np.array(img), one_hot_label(i)])
  shuffle(test_images)
  return test_images

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

Using TensorFlow backend.
  0%|                                                                                            | 0/2 [00:00<?, ?it/s]
Traceback (most recent call last):
  File "retrain.py", line 47, in <module>
    training_images = train_data_with_label()
  File "retrain.py", line 32, in train_data_with_label
    img = cv2.resize(img, (64,64))
cv2.error: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:3720: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Судя по ошибке, кажется, что во входе есть какая-то проблема. Это должен быть список непустых массивов. Пожалуйста, проверьте путь и изображения для любого поврежденного изображения. Также проверьте форматы изображений;если присутствует какой-либо многополосный tiff-файл, который cv2.imread не может прочитать.

Попробуйте прочитать изображения в пакетном режиме, чтобы определить, в каком пакете содержится изображение, вызывающее проблему.

0 голосов
/ 05 октября 2019

Вы, вероятно, читаете недопустимое изображение с нулевым разрешением. Проверьте путь к изображению, поскольку размер исходного изображения, скорее всего, пуст и не был правильно прочитан. Вы можете проверить форму изображения, чтобы убедиться, что оно имеет действительный размер (height, width, channels), подобный этому

image = cv2.imread('noexist.png')
print(image.shape)

Если вы получаете ошибку AttributeError, подобную этой, это означает, что путь к вашему изображению неверен / поврежден.

Traceback (most recent call last):
  File ".\test.py", line 4, in <module>
    print(image.shape)
AttributeError: 'NoneType' object has no attribute 'shape'

OpenCV не сгенерирует исключение, пока вы не попытаетесь что-то сделать с этим NoneType объектом. Поэтому в следующей строке при попытке изменить размер изображения выдается ошибка. Ваша ситуация воспроизводима с помощью этого простого примера

import cv2

image = cv2.imread('noexist.jpg')
resize = cv2.resize(image, (64,64))
cv2.waitKey()

Обратите внимание, что если вы удалите cv2.resize(), исключение не будет выдано. Чтобы решить вашу проблему, вы можете использовать cv2.error и блок try/except, чтобы перехватить исключение

import cv2

image = cv2.imread('noexist.jpg')
try:
    resize = cv2.resize(image, (64,64))
except cv2.error as e:
    print('Invalid frame!')
cv2.waitKey()

Неверный кадр!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...