我有一个名为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而且什么都不玩。我做错了什么?
答案 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上进行验证和测试。