如何用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()
关于你原代码的问题说明
- 语法错误:
cap = cv2.VideoCapture(...)末尾多了个英文句号;print(frame.shape)缺少右括号 - 路径格式错误:你的编号是4位数字(比如5000),应该用
{:04d}而非{:03d},但这也只能解决连续编号的情况,非连续序列依然不适用
内容的提问来源于stack exchange,提问作者carbassot
相关产品推荐
相关产品推荐

