制作提取帧的视频时出错

问题描述 投票:0回答:1

我将视频帧提取到名为“ images”的文件夹中。让我们考虑:

a0.jpga1.jpga2.jpga3.jpg和......

现在我要制作这些帧的视频。

我有此代码可以从提取的视频中创建视频

  import cv2
import os


image_folder = 'images'
video_name = 'video.avi'


images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
for i in range(len(images)):
    image_name = 'a' + str(i) + '.jpg'
    frame = cv2.imread(os.path.join(image_folder, images[0]))

    height, width, layers = frame.shape

    video = cv2.VideoWriter(video_name, 0, 1, (width, height))

    video.write(cv2.imread(os.path.join(image_folder, image_name)))
cv2.destroyAllWindows()
video.release()

问题是,当我制作视频时,我得到了视频,但是帧是随机排列的,如何按顺序排列它们?感谢您的帖子我该如何解决?

python image opencv video frame
1个回答
0
投票

正如您所说的,您的帧不整齐,这意味着当您通过os.listdir获得帧时,它们并不整齐。您还说过它们的名称类似于a0,a1等,因此您可以执行以下操作:

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
for i in range(len(images)):
    image_name = 'a' + str(i) + '.jpg'
    video.write(cv2.imread(os.path.join(image_folder, image_name)))

编辑

您将视频编写器放置在循环中,因此每次都会重新创建它。这次我附上了完整的代码,应该可以使用。

import cv2
import os

image_folder = 'images'
video_name = 'video.avi'

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]

frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, 0, 1, (width, height))

for i in range(len(images)):
    image_name = 'a' + str(i) + '.jpg'
    video.write(cv2.imread(os.path.join(image_folder, image_name)))

cv2.destroyAllWindows()
video.release()
© www.soinside.com 2019 - 2024. All rights reserved.