如何在函数中使用cv2.VideoWriter静止帧到视频

时间:2019-06-06 00:12:40

标签: python python-3.x opencv

cv2.VideoWriter对象通过函数调用传递时,我似乎无法cv2.VideoWriter将任何帧写入视频。我不知道它是否可能是一个不变的对象,这可能就是原因吗?

我知道当我只添加随机的单个框架而不使用任何功能时,这是可行的。

我尝试从每个函数调用中简单地返回并存储VideoWriter对象,而没有结果。

这有效:

import cv2

fourcc = cv2.VideoWriter_fourcc(*'XVID')
vid = cv2.VideoWriter('vid.avi', fourcc, 1, (512, 512))
img = cv2.imread('dog.png')
vid.write(img)
img = cv2.imread('cat.png')
vid.write(img)
vid.release()

但这不包括以vid作为参数的函数调用:

import cv2

def add_img(vid):
   img = cv2.imread('dog.png')
   vid.write(img)
   img = cv2.imread('cat.png')
   vid.write(img)

fourcc = cv2.VideoWriter_fourcc(*'XVID')
vid = cv2.VideoWriter('vid.avi', fourcc, 1, (512, 512))
add_img(vid)
vid.release()

我没有收到任何错误,但根本不会添加任何图像...

1 个答案:

答案 0 :(得分:0)

不,这不是预期的行为,我已经测试了以下代码,并且工作正常。我正在创建一个随机插入100帧的视频文件,并将其插入方法中。

import cv2
import numpy as np

fourcc = cv2.VideoWriter_fourcc(*'MJPG')
vid_ = cv2.VideoWriter('/Users/anmoluppal/PycharmProjects/testing/temp/vid.avi', fourcc, 30, (640, 480))


def create_image(vid):
    for i in xrange(100):
        mat = np.random.randint(0, 255, (480,640,3)).astype('uint8')

        vid.write(mat)

create_image(vid_)
vid_.release()