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

Posted

技术标签:

【中文标题】cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它【英文标题】:cv2.VideoWriter: Asks for a tuple as Size argument, then rejects it 【发布时间】:2019-10-15 16:04:58 【问题描述】:

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

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

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

当 Size 不是元组时:

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

当我将 Size 更改为元组时:

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

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

【问题讨论】:

heightwidth 的确切值是多少?我可以重现这一点的唯一方法是它们是浮点值。它们应该是整数。提供minimal reproducible example。 @DanMašek 代码是这样的:width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) 但在上限之前没有“int”。得到。我添加了“int”,现在它可以工作了。谢谢。 【参考方案1】:

我试图从上传的视频中获取高度和宽度:

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))

现在我没有得到那个错误。它还不能作为一个整体工作,但那个特定的错误已经不存在了。

【讨论】:

【参考方案2】:

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

似乎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的位置,它需要实数但得到元组

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

【讨论】:

【参考方案3】:

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

其他尝试:

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

【讨论】:

没意义,这没什么区别,你只是没有在 OP 端重现实际场景,因为他们没有提供minimal reproducible example。

以上是关于cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cv2.VideoWriter 中使用 FPS 参数?

cv2.VideoWriter 保存图像为视频的几个问题

有没有办法选择 cv2 VideoWriter 写入哪个目录?

cv2.VideoWriter() 在带有 Raspicam 的 Raspberry Pi 上不起作用

cv2.VideoWriter 不会使用fourcc h.264写入文件(使用罗技c920,python 2.7,windows 8)

如何捕获 OpenCV 写入 stderr 的消息?