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

如何用OpenCV的VideoCapture读取非连续编号的图片序列?

解决OpenCV VideoCapture读取非连续编号图片序列的问题

cv2.VideoCapture的CAP_IMAGES模式是为连续整数编号的图片序列设计的,它会自动递增编号来寻找下一张图。你的图片编号是间隔的(比如5000、5002、5004...),所以这个模式无法匹配到后续图片,自然会报错或返回空帧。

最可靠的解决方法是手动生成图片路径列表,逐个读取,完全可控,适配任何编号规则。

修正后的可行代码

import cv2
import glob

# 第一步:获取所有符合命名格式的图片路径
# 先匹配所有img5开头的png图片
image_paths = sorted(glob.glob("/path/img5*.png"))

# 第二步:筛选出偶数编号的图片(根据你的需求调整过滤规则)
# 提取编号部分并判断是否为偶数
image_paths = [
    path for path in image_paths 
    if int(path.split("img5")[-1].replace(".png", "")) % 2 == 0
]

# 第三步:循环读取并显示图片
for path in image_paths:
    frame = cv2.imread(path)
    if frame is None:
        print(f"读取失败:{path}")
        continue
    
    cv2.imshow('image', frame)
    # 按任意键继续,按ESC(ASCII码27)可提前退出
    if cv2.waitKey(0) == 27:
        break
    print(frame.shape)

# 最后关闭窗口
cv2.destroyAllWindows()

关于你原代码的问题说明

  1. 语法错误:cap = cv2.VideoCapture(...)末尾多了个英文句号;print(frame.shape)缺少右括号
  2. 路径格式错误:你的编号是4位数字(比如5000),应该用{:04d}而非{:03d},但这也只能解决连续编号的情况,非连续序列依然不适用

内容的提问来源于stack exchange,提问作者carbassot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:10:04