如何使用Python加载命名范围为S1-T1-C.00000至00999的图片序列?
图片序列加载实现方案
原有代码存在两处核心错误:
import S1-T1-C.00000属于语法错误,import是用于导入Python第三方库/本地模块的关键字,不能直接导入图片文件Image.open()仅支持读取单个图片文件,不能直接读取整个目录下的序列文件
前置依赖
首先确保安装了Pillow图像处理库,未安装可执行命令:pip install pillow
实现代码
根据使用场景可以选择两种加载方式:
方式1:全量加载到内存
适合后续需要随机访问任意帧的场景,1000张普通分辨率图片内存占用极低可直接使用:
import os from PIL import Image # 基础参数配置,可根据实际情况修改 seq_dir = r"C:/Users/Vims/Desktop/7th sem/ISA/Lab_1/sequence/sequence" file_template = "S1-T1-C.{:05d}" # 如果图片带后缀比如.png,改成"S1-T1-C.{:05d}.png" start_idx = 0 end_idx = 999 img_sequence = [] for idx in range(start_idx, end_idx + 1): img_path = os.path.join(seq_dir, file_template.format(idx)) # 可选添加文件存在性校验,避免缺失文件报错 if not os.path.exists(img_path): raise FileNotFoundError(f"缺失序列文件:{img_path}") img = Image.open(img_path) # 如果后续用OpenCV做背景减除,可直接转成numpy数组: # import numpy as np # img = np.array(img) img_sequence.append(img) print(f"序列加载完成,共{len(img_sequence)}帧")
方式2:迭代器逐帧加载
适合只需要逐帧处理的背景减除场景,内存占用几乎为0:
import os from PIL import Image def load_seq_iter(seq_dir, template, start, end): for idx in range(start, end + 1): img_path = os.path.join(seq_dir, template.format(idx)) yield Image.open(img_path) # 调用示例,直接遍历处理即可 for frame in load_seq_iter( seq_dir = r"C:/Users/Vims/Desktop/7th sem/ISA/Lab_1/sequence/sequence", template = "S1-T1-C.{:05d}", start = 0, end = 999 ): # 此处插入背景减除逻辑 pass
注意事项
- 如果你的序列文件带.png/.jpg等后缀,记得修改
file_template变量补充后缀 - 若使用OpenCV官方提供的背景减除算法(MOG2、KNN等),将PIL图片转成numpy数组后可直接传入算法接口
内容的提问来源于stack exchange,提问作者Vims Rocz
相关产品推荐
相关产品推荐

