使用10秒钟的OpenCV(Python)将2张图像写入视频

时间:2019-06-08 15:05:06

标签: python opencv

我正在尝试拍摄本地文件夹中的2张图像,并使用OpenCV的Videowriter功能从这些图像创建视频。 我正在使用1的FrameRate。因此,这将创建2秒持续时间的视频。下面是代码(我从here获得了代码):

import cv2
import os

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

images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
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 image in images:
    video.write(cv2.imread(os.path.join(image_folder, image)))

cv2.destroyAllWindows()
video.release()

目标:我想创建一个10秒的视频,将这2张图像分别显示5秒。

我认为论坛中可能存在类似的问题,但我找不到它。如果有人可以指出解决方案,那就太好了。

谢谢。

1 个答案:

答案 0 :(得分:1)

下面的代码段应该可以解决您的问题。请注意,您将必须指定each_image_duration。我使用此变量将视频中的每个图像写入特定的持续时间。对于此用例,您必须将fps保留为1.0,以便为1.0 sec显示每个视频帧。这将使cv2.Videowriter中的第三个参数成为可能。

import cv2
import os

image_folder = 'images'
video_name = 'video.avi'
each_image_duration = 5 # in secs
fourcc = cv2.VideoWriter_fourcc(*'XVID') # define the video codec

images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

video = cv2.VideoWriter(video_name, fourcc, 1.0, (width, height))

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

cv2.destroyAllWindows()
video.release()