如何使用Python OpenCV从指定文件夹随机读取并打开图片
问题原因
你的代码核心问题是os.listdir()仅返回目标文件夹下的文件名本身,不会携带父级路径前缀。你直接把纯文件名传给cv2.imread()时,程序会默认从当前脚本的工作目录下查找对应文件,而不是从./images/目录下查找,最终读取图片失败返回None,后续调用imshow时就会触发尺寸校验失败的报错。
修复方案
你需要把随机选中的文件名和父级路径拼接成完整路径再传入cv2.imread(),参考代码如下:
import cv2 import os import random img_dir = "./images/" # 过滤非图片文件,避免选中文件夹或者无效文件 file_list = [f for f in os.listdir(img_dir) if f.lower().endswith(('.jpeg', '.jpg', '.png', '.bmp'))] if not file_list: raise FileNotFoundError(f"目录 {img_dir} 下没有符合要求的图片文件") # 随机选取图片 file = random.choice(file_list) # 拼接得到完整的图片路径 full_img_path = os.path.join(img_dir, file) capture = cv2.imread(full_img_path)
额外排查项
如果修改代码后仍然报错,可按以下顺序排查:
- 确认路径大小写是否匹配:你之前的固定路径写的是
.Images/,后续随机读取用的是./images/,注意Windows和macOS/Linux对路径大小写的敏感度不同 - 确认选中的文件不是损坏的图片文件
- 可以新增
print(full_img_path)代码打印拼接后的完整路径,手动确认路径是否正确、对应文件是否存在
内容的提问来源于stack exchange,提问作者Mattijs Kok
相关产品推荐
相关产品推荐

