运行Kaggle样本代码遇OpenCV(4.6.0) resize函数断言失败错误求助
问题排查与解决
这个!ssize.empty()错误的核心原因是**cv2.imread()没有成功读取到图片,返回了None**,导致cv2.resize()无法对空对象执行缩放操作。以下是具体的排查和修复步骤:
1. 检查图片路径是否完整正确
你的代码只给image_id加上了.jpg后缀,但没有指定数据集的根目录路径。在Kaggle环境中,数据集通常存放在/kaggle/input/[你的数据集名称]/目录下,必须把这个根路径拼接到文件名前,否则cv2.imread找不到文件。
修正路径拼接逻辑:
import os # 替换成你的数据集实际根目录 DATA_ROOT = "/kaggle/input/your-dataset-folder-name/" train_img = [] for img_name in tqdm(train['image_id'].values): # 拼接完整路径 full_img_path = os.path.join(DATA_ROOT, img_name + '.jpg') train_img.append(full_img_path) train['image'] = train_img
2. 在代码中添加读取失败的判断
即使路径正确,也可能存在损坏的图片文件,导致cv2.imread返回None。在执行resize前必须判断图片是否读取成功,避免程序崩溃:
IMG_SIZE = 224 data = [] # 确保data变量已定义,避免全局变量隐患 def read_img(img_path): img = cv2.imread(img_path, cv2.IMREAD_COLOR) # 检查图片是否读取成功 if img is None: print(f"警告:无法读取图片,路径可能错误或文件损坏: {img_path}") return None img = cv2.resize(img, (IMG_SIZE, IMG_SIZE)) img_array = img_to_array(img) data.append(img_array) # 建议添加数组而非原图片,避免内存浪费 return img_array
3. 验证图片文件状态
如果仍然有读取失败的情况,可以手动检查对应的图片文件:
- 确认文件是否存在于指定路径下
- 检查图片是否损坏(比如用图片查看器打开测试)
- 部分特殊格式的图片可能不被OpenCV支持,可以尝试用PIL库读取替代:
from PIL import Image def read_img(img_path): try: img = Image.open(img_path).convert('RGB') img = img.resize((IMG_SIZE, IMG_SIZE)) img_array = img_to_array(img) data.append(img_array) return img_array except Exception as e: print(f"读取图片失败: {img_path}, 错误信息: {str(e)}") return None
内容的提问来源于stack exchange,提问作者Uttam
相关产品推荐
相关产品推荐

