cv.imread读取单文件正常,遍历os.listdir()批量读取返回None如何解决?
错误根因
os.listdir('./data')仅返回指定目录下的纯文件名,不会携带父级目录前缀,遍历得到的img变量为btn1.png这类无路径字符串,不是可被cv.imread正确识别的相对/绝对路径。- 脚本默认从当前运行的工作目录查找文件,直接传入纯文件名时,程序会在脚本执行目录而非
./data目录下查找图片,找不到对应文件就会返回None。
修复代码
将目录路径和文件名拼接为完整路径后再传入cv.imread即可:
imgs = os.listdir('./data') targets = [] for img in imgs: # 拼接得到完整的图片路径 img_path = os.path.join('./data', img) target = cv.imread(img_path) targets.append(target)
可选校验逻辑
如果仍存在返回None的情况,可增加路径合法性校验,过滤目录下的非图片文件或隐藏文件:
imgs = os.listdir('./data') targets = [] for img in imgs: img_path = os.path.join('./data', img) # 跳过非文件类型 if not os.path.isfile(img_path): continue target = cv.imread(img_path) if target is not None: targets.append(target)
内容的提问来源于stack exchange,提问作者r01_mage
相关产品推荐
相关产品推荐

