cv2.VideoWriter:要求元组作为Size参数,然后拒绝它

时间:2019-05-30 02:12:29

标签: python opencv video-processing cv2

我正在使用OpenCV 4.0和Python 3.7来创建延时视频。

在构造VideoWriter对象时,文档说Size参数应该是一个元组。

当我给它一个元组时,它会拒绝它。当我尝试用其他东西替换它时,它不会接受它,因为它说该参数不是元组。

当大小不是元组时:

out = cv2.VideoWriter('project.avi', 1482049860, 30, height, width)
SystemError: new style getargs format but argument is not a tuple

当我将大小更改为元组时:

out = cv2.VideoWriter('project.avi', 1482049860, 30, (height, width))
TypeError: must be real number, not tuple

我只想创建一个简单的cv2.VideoWriter对象。

3 个答案:

答案 0 :(得分:3)

我遇到了同样的情况,这是我的解决方案:

似乎cv2.VideoWriter()倾向于“删除”类型错误的参数。就我而言,我使用pathlib.Path作为第一个输出文件名参数,例如:

p=Path('project.avi')

out = cv2.VideoWriter(p, 1482049860, 30, frameSize=(height, width))

但是cv2.VideoWriter()只接受str,因此它“丢弃”了p,并收到了:

out = cv2.VideoWriter(1482049860, 30, frameSize=(height, width))

然后(height, width)实际上处于fps的位置,它需要实数但会得到元组

因此,我建议您检查每个参数以确保它们具有正确的类型。

答案 1 :(得分:0)

尝试更新到opencv v4.1.0。在那里没有看到那个问题。

其他尝试:

out = cv2.VideoWriter('project.avi', 1482049860, 30, frameSize=(height, width))

答案 2 :(得分:0)

我试图使用以下方法从上传的视频中获取高度和宽度:

width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

我将其更改为:

width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

现在我没有得到这个错误。总体而言,它尚不起作用,但不再存在该特定错误。