You need to enable JavaScript to run this app. 调用OpenCV resize函数时出现!ssize.empty()断言失败的原因是什么?
优惠活动
大模型
产品
解决方案
定价
更多

调用OpenCV resize函数时出现!ssize.empty()断言失败的原因是什么?

resize空值报错根因说明

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

这个报错和resize函数本身的逻辑无关,触发条件是OpenCV在执行resize前做输入校验时,发现传入的待处理图像是一个空值(None)——也就是cv2.imread没能成功读取到目标文件,返回了默认的None值,直接传入resize函数就会触发这个空值断言失败。

你的代码存在的具体问题

对照给出的代码,有两个直接导致读取失败的硬伤:

  • 字符串硬拼路径时,目录和文件名之间缺少路径分隔符:你写的路径拼接逻辑是目录路径 + 图片ID + 后缀,拼出来的完整路径是/content/drive/MyDrive/DATASET/HAM10000_images_part_1图片ID.jpg,系统会把HAM10000_images_part_1图片ID.jpg识别为带后缀的文件名,而不是“part1文件夹下以图片ID命名的jpg文件”,自然找不到目标文件
  • 缺少imread返回值校验:OpenCV的imread遇到文件不存在、路径无权限、文件损坏的情况,不会主动抛出可读的错误提示,只会静默返回None,你没有加判断就直接把返回值传给resize,把本该在文件读取环节暴露的问题,延后到了resize环节触发,才会造成“resize涉及空值”的错觉
修正后的可运行代码
import os
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取数据集对应的图像ID列表
fname_images = np.array(df_skin['image_id'])
# 定义两个HAM10000的图像存储路径(该数据集本身分两个压缩包拆分存储)
img_dirs = [
    '/content/drive/MyDrive/DATASET/HAM10000_images_part_1',
    '/content/drive/MyDrive/DATASET/HAM10000_images_part_2'
]

# 自动匹配对应图片所在的路径
file_to_read = None
for img_dir in img_dirs:
    candidate_path = os.path.join(img_dir, f"{fname_images[0]}.jpg")
    if os.path.exists(candidate_path):
        file_to_read = candidate_path
        break

# 提前做读取校验,避免下游函数触发无意义的空值报错
if file_to_read is None:
    raise FileNotFoundError("在指定的两个存储路径下,未找到对应ID的图像文件")

img = cv2.imread(file_to_read)
if img is None:
    raise ValueError(f"图像文件损坏或格式不支持,读取失败:{file_to_read}")

# 执行缩放操作
img2 = cv2.resize(img, (100, 100))

# 绘制对比图
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
plt.imshow(img[:,:,::-1])
plt.title('Original image')
plt.subplot(1,2,2)
plt.imshow(img2[:,:,::-1])
plt.title('Resized image for DenseNet')
plt.show()
长期避坑提示
  • 永远不要用字符串直接拼接文件路径,统一用os.path.join处理路径,自动适配不同系统的分隔符规则,从根源上避免漏写斜杠的低级错误
  • OpenCV的imread不支持读取带中文的路径,涉及中文路径时需要换用np.fromfile搭配cv2.imdecode的方式读取
  • 所有涉及文件读取的环节,都要在拿到返回值后立刻判断是否为None,不要等下游处理函数触发空值报错,再回头排查上游的读文件问题

内容的提问来源于stack exchange,提问作者Ahmed Tamam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 15:54:06