我正在使用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对象。
答案 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))
现在我没有得到这个错误。总体而言,它尚不起作用,但不再存在该特定错误。