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 对象。
【问题讨论】:
height
和 width
的确切值是多少?我可以重现这一点的唯一方法是它们是浮点值。它们应该是整数。提供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() 在带有 Raspicam 的 Raspberry Pi 上不起作用
cv2.VideoWriter 不会使用fourcc h.264写入文件(使用罗技c920,python 2.7,windows 8)