Python初学者创建图像NumPy数组遇cv2.resize错误求助
解决OpenCV resize错误:
ssize.width > 0 && ssize.height > 0 嘿,我来帮你搞定这个问题!你遇到的这个错误本质是传给cv2.resize的是无效/空图像(也就是img变量是None),没法执行缩放操作。咱们一步步拆解原因并修复:
核心错误原因
遍历对象完全错了
你写的for image in data_path是在遍历字符串data_path的每个字符,而不是遍历data1文件夹里的图片文件!正确的遍历对象应该是data_path_folder——也就是你用os.listdir(data_path)拿到的文件夹文件列表。未处理无效文件/读取失败场景
文件夹里可能混有非图片文件,或者路径拼接错误导致图片读取失败,这时候cv2.imread会返回None,直接传给resize就会触发这个报错。
修正后的完整代码
import cv2 import os import numpy as np PATH = os.getcwd() # 用os.path.join拼接路径,避免不同系统的斜杠兼容性问题 data_path = os.path.join(PATH, 'data1') data_path_folder = os.listdir(data_path) X_data = [] # 遍历文件夹里的每个文件 for filename in data_path_folder: # 拼接完整的图片路径 img_path = os.path.join(data_path, filename) # 过滤非图片文件(可根据需要添加更多后缀) if not filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')): continue # 读取图片 img = cv2.imread(img_path, cv2.IMREAD_COLOR) # 检查图片是否读取成功,失败则跳过并打印警告 if img is None: print(f"警告:无法读取文件 {img_path},已跳过") continue # 缩放图片 img_resize = cv2.resize(img, (128, 128)) X_data.append(img_resize) # 确保有图片加载成功再进行后续处理 if X_data: img_data = np.array(X_data) img_data = img_data.astype('float32') img_data /= 255 print(img_data.shape) else: print("没有成功加载任何图片,请检查data1文件夹里的内容")
关键改进点
- 用
os.path.join拼接路径:避免手动加斜杠在Windows/Linux下的兼容性问题 - 过滤非图片文件:只处理常见格式的图片,跳过无关文件
- 增加读取失败判断:打印警告并跳过无效文件,避免程序直接崩溃
- 增加非空判断:防止没有图片加载时执行数组转换报错
内容的提问来源于stack exchange,提问作者SUNNY
相关产品推荐
相关产品推荐

