CV2图像错误:错误:(-215:断言失败)!ssize.empty()在函数'cv :: resize'中

新手上路,请多包涵

我正在使用 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'

原文由 Will Downs 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.7k
1 个回答

您的 imread() 调用失败。它返回 None

当您尝试 imread() 一个不存在的文件,或者它不是正确的图片文件时, imread 通过返回 None feina0- 发出信号,Python而不是适当的 numpy 数组。

现在,当您将此 None 传递给 resize() 时, resize() 注意到并抛出此错误。它会尝试检查参数是否是一个正确的数组,并且它不是一个空数组。在这种情况下,您的参数甚至不是数组,但错误是相同的。

如何解决这个问题: 检查 imread() 的结果是否为 None 。如果是 None ,读取失败。只需继续循环到下一个图片文件名。

 img = cv2.imread(path)
if img is None:
    continue

顺便说一句: 3 在—的第二个参数中意味着 imread IMREAD_COLOR | IMREAD_ANYDEPTH

原文由 Christoph Rackwitz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题