【问题标题】:Opencv saving empty video PythonOpencv保存空视频Python
【发布时间】:2023-01-19 19:50:34
【问题描述】:

我在从相机录制视频时遇到问题。我正在使用 python 和 opencv 来这样做。我有 QImage 格式的图像,我将它们转换为 numpy 数组,以便在摄像头视频捕获时显示流式传输(使用 opencv 的 VideoCapture),一切正常。 当我尝试录制视频并将其保存在文件夹中时(使用 opencv 的 VideoWriter_fourcc),我没有收到任何错误,但我得到了一个空视频。我做了很多搜索来找到问题,但我找不到。 这是我用来录制视频的代码:

import cv2

fourcc = cv2.VideoWriter_fourcc('M','J','P','G')  
#img is a numpy array  
videoWriter = cv2.VideoWriter('video.avi', fourcc, 20,  (img.shape[0],img.shape[1]))
while True:
    videoWriter.write(img)
videoWriter.release()

我尝试更改帧速率、帧大小、视频的扩展名和编解码器的代码,但没有任何效果。 我好绝望。我感谢我能得到的所有帮助和建议。 谢谢

【问题讨论】:

    标签: python python-3.x opencv video-streaming video-capture


    【解决方案1】:

    可能的原因:

    在您的代码中,您只向视频写入一个帧,这就是视频为空的原因。您需要不断地向视频写入帧,直到完成录制。您可以通过在从相机捕获帧的循环中移动 videoWriter.write(img)videoWriter.release() 行来完成此操作,并且仅在完成录制后才释放视频编写器。

    解决方案:

    import cv2
    
    fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
    cap = cv2.VideoCapture(0)
    videoWriter = cv2.VideoWriter('video.avi', fourcc, 20, (int(cap.get(3)), int(cap.get(4))))
    
    while True:
        ret, frame = cap.read()
        if ret:
            videoWriter.write(frame)
        else:
            break
    
    cap.release()
    videoWriter.release()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-09
      • 2015-06-01
      • 1970-01-01
      • 2021-01-02
      • 2019-12-04
      • 1970-01-01
      • 2019-09-14
      • 2020-09-24
      相关资源
      最近更新 更多