调用cv2.VideoWriter时size参数应如何设置?size未定义报错如何解决
cv2.VideoWriter size参数说明与报错解决
size参数要求
cv2.VideoWriter的size参数需要传入*(宽度, 高度)*格式的整数元组,单位为像素,数值必须和后续写入视频的每帧图像尺寸完全一致。
报错原因
你遇到的NameError: name 'size' is not defined报错是因为size变量仅在遍历图片的for循环内部定义,当glob.glob没有匹配到任何符合条件的jpg图片时,for循环不会执行,size变量自然就没有被初始化,调用VideoWriter时就会找不到该变量。
解决步骤
- 第一步:确认图片路径配置正确
先打印匹配到的文件列表,确认路径、文件格式没有问题:
如果输出为空,检查路径是否存在、路径内是否有后缀为print(glob.glob('C:/New folder/Images/*.jpg')).jpg的图片、路径拼写是否正确(注意空格、中英文符号、斜杠方向)。 - 第二步:优化代码逻辑,避免变量未定义问题
建议提前判断是否匹配到图片,并且统一取第一张图片的尺寸作为size参数值,避免出现部分图片尺寸不一致导致的后续写入错误,修改后代码如下:import cv2 import numpy as np import glob img_array = [] # 遍历匹配图片 for filename in glob.glob('C:/New folder/Images/*.jpg'): img = cv2.imread(filename) if img is None: continue img_array.append(img) # 先判断是否读到有效图片再执行后续逻辑 if len(img_array) == 0: print("未读取到任何有效图片,请检查路径配置") else: # 取第一张图片的尺寸作为输出视频的尺寸 height, width, layers = img_array[0].shape size = (width, height) out = cv2.VideoWriter('project.avi',cv2.VideoWriter_fourcc(*'DIVX'), 15, size) for img in img_array: out.write(img) out.release() print("视频生成完成")
内容的提问来源于stack exchange,提问作者nicomp
相关产品推荐
相关产品推荐

