OpenCV - 从现有图像制作视频

时间:2018-05-18 12:11:52

标签: python numpy opencv video

我有一个名为images的numpy数组图像数组。让我们为讨论说 -

images = [cv2.imread("data/frame" + str(i) + ".jpg") for i in range(15)]

数据是包含视频帧的目录。 然后我尝试将它们保存为视频,使用以下代码:

fourcc = cv2.VideoWriter_fourcc(*'mp4v')
shape = images[0].shape[:2]
vid = cv2.VideoWriter("my_vid.avi", fourcc, 1, shape)
for fg_frame in images:
    vid.write(np.uint8(fg_frame))
vid.release()

但保存的视频大小只有5-6 KB而且什么都不玩。我做错了什么?

1 个答案:

答案 0 :(得分:1)

原因是cv2.VideoWriter的构造函数在第4个参数中获取视频大小,该参数应该是(width, height)形式的元组。

shape数组的numpy成员将维度存储为(height, width)

由于VideoWriter与实际图像之间的尺寸不匹配,因此不会将任何帧写入磁盘。

当作为参数传递给shape时,您必须交换VideoWriter的元素。正确的代码可能如下所示:

shape = images[0].shape[:2]
video_size = (shape[1], shape[0])
vid = cv2.VideoWriter("my_vid.avi", fourcc, 1, video_size)

使用Python 3和OpenCV 3.4在Ubuntu 14.04上进行验证和测试。