You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python加载命名范围为S1-T1-C.00000至00999的图片序列?

图片序列加载实现方案

原有代码存在两处核心错误:

  1. import S1-T1-C.00000 属于语法错误,import 是用于导入Python第三方库/本地模块的关键字,不能直接导入图片文件
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:06:08