Python 3.x 无法在opencv 3中保存视频

Python 3.x 无法在opencv 3中保存视频,python-3.x,opencv,Python 3.x,Opencv,我正在尝试对视频应用Canny filter,以便在output.mp4文件中使用Canny filter生成视频。 我发现输出文件的大小是1KB,而原始视频的大小是30MB 这是我使用的代码: import numpy as np import cv2 Video = cv2.VideoCapture('video.mp4') width = int(Video.get(cv2.CAP_PROP_FRAME_WIDTH) + 0.5) height = int(Video.get(cv2.CA

我正在尝试对视频应用Canny filter,以便在output.mp4文件中使用Canny filter生成视频。 我发现输出文件的大小是1KB,而原始视频的大小是30MB

这是我使用的代码:

import numpy as np
import cv2
Video = cv2.VideoCapture('video.mp4')
width = int(Video.get(cv2.CAP_PROP_FRAME_WIDTH) + 0.5)
height = int(Video.get(cv2.CAP_PROP_FRAME_HEIGHT) + 0.5)
fourcc = cv2.VideoWriter_fourcc(*'mp4v') 
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (width, height))
while(Video.isOpened()):
ret, frame = Video.read()
if ret==True:
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray, 100, 100)
    cv2.imshow('frame',edges)
    out.write(edges)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

Video.release()
out.release()
cv2.destroyAllWindows()

因为您正在编写灰色图像,所以必须通过VideoWriter的
isColor
值的
False

只需将
out=
行更改为:

out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (width, height), False)

还有,为什么要在宽度和高度之前加上0.5呢!?请注意,VideoWriter的w和h必须与您要输入的帧相同,因此,如果您在不调整正在写入的帧大小的情况下更改w和h,VideoWriter将无法工作(尽管在您的示例中,0.5没有任何作用,因为
int
只会使其落地)。

是否安装了编解码器?是的。我使用Windows上的spyder在Anconda 3上运行此代码尝试安装
XVID
编解码器并将文件保存为.avi格式