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

OpenCV从目录图片生成视频异常:仅显示单张图片求助

问题排查与修复

1. 核心问题:For循环代码块缩进错误

你的代码中video.write语句没有缩进,Python通过缩进识别代码块,这导致该行不在循环体内,只会执行一次(而非遍历所有图片)。修正后的循环代码应该是:

for image in images:        
    video.write(cv2.imread(os.path.join(image_folder, image)))

注意video.write前要添加4个空格(或1个tab)的缩进,确保它属于for循环的执行体。

2. 潜在问题:文件列表顺序不确定

os.listdir()返回的文件顺序依赖于文件系统,并非按文件名自然排序。如果需要按特定顺序(如文件名数字递增)生成视频,建议对图片列表排序:

# 按文件名默认排序
images.sort()
# 如果是数字命名的图片(如img1.jpg、img2.jpg),可使用精准排序:
images.sort(key=lambda x: int(''.join(filter(str.isdigit, x))))

3. 潜在问题:VideoWriter编码兼容性

你使用0作为FourCC编码参数,这在不同操作系统上可能存在兼容性问题,导致部分帧无法写入。建议显式指定兼容的编码,比如XVID:

fourcc = cv2.VideoWriter_fourcc(*'XVID')
video = cv2.VideoWriter(video_name, fourcc, 0.25, (width, height))

4. 优化建议:路径冗余问题

你已经切换到图片目录os.chdir("C:/New folder/Images/q/"),后续可以直接使用文件名而非拼接绝对路径,简化代码:

video.write(cv2.imread(image))

修正后的完整代码:

import os
import cv2

def generate_video():
    image_folder = 'C:/New folder/Images/q/'
    video_name = 'myvideo.avi'
    os.chdir(image_folder)

    images = [img for img in os.listdir(image_folder)
              if img.endswith((".jpg", ".jpeg", ".png"))]
    # 按文件名排序
    images.sort()

    if not images:
        print("未找到任何图片文件")
        return

    frame = cv2.imread(images[0])   
    height, width, layers = frame.shape
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    video = cv2.VideoWriter(video_name, fourcc, 0.25, (width, height))

    for image in images:        
        video.write(cv2.imread(image))

    video.release()
    cv2.destroyAllWindows()

generate_video()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:50:37