【问题标题】:python - Output by OpenCV VideoWriter emptypython - OpenCV VideoWriter 的输出为空
【发布时间】:2021-10-23 23:21:00
【问题描述】:

我最近开始使用 opencv-python 进行编程,但是当我尝试使用 cv2 编写视频时卡住了。 脚本的输出为空。这是我的代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt

cap = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'h263')
out = cv2.VideoWriter('cv2_camera_output.mp4',fourcc, 20.0, (800,600))


while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame', frame)
    cv2.imshow('gray', gray)
    out.write(frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break


cap.release()
out.release()
cv2.destroyAllWindows()

我猜问题一定与fourcc编解码器有关。所以我用谷歌搜索是否有适用于 mac 的fourCC 编解码器(我使用的是 OS X 10.12.3 (Sierra)),但 所有建议都不适用于我的电脑,所以这个问题甚至可能不存在在fourCC编解码器中。这些是我访问过的链接:

OpenCV Documentation (I didn't follow this one, it was just to make sure, and it didn't work either)

GitHub Tests for FourCC codecs on OS X

有人知道真正的问题吗?任何帮助都会很棒

【问题讨论】:

    标签: python opencv fourcc


    【解决方案1】:

    您的框架宽度和高度必须与您的VideoWriter 的宽度和高度相同。只需在out.write(frame) 之前添加它,您可能会没事:

    frame = cv2.resize(frame,(800,600))
    

    或者将VideoWriter 的大小更改为网络摄像头框架的初始大小。我的是(640,480)。我想如果你的操作系统不支持这种格式,它就不会写任何东西。甚至不会创建一个空文件。我在 Linux 上,我认为 'h263' 不起作用,但 'h264' 可以。当我使用“h263”时,它不会生成任何文件。

    【讨论】:

    • 我已经试过了,我用了size = (int(cap.get(3)), int(cap.get(4))),然后out = cv2.VideoWriter('cv2_camera_output.avi',fourcc, 20.0, size),但还是不行。无论如何,感谢您的努力!
    • 虽然这不是一个坏建议,但如果不是有效的解决方案,这不应该是公认的答案。
    【解决方案2】:

    我解决了这个问题。问题只是我不能将 VideoWriter 用于灰度,所以我不得不将它用于彩色帧。

    【讨论】:

      【解决方案3】:

      最大的问题是 h263 指定了它可以编码的确切帧大小(查看https://en.wikipedia.org/wiki/H.263#Version_1_and_Annex_I 的可能值),而您不遵守这一点。

      解决此问题后,h263 可能仍无法与 OSX 上的 mp4 容器一起使用(在 Linux 和 Windows 上,因为它们使用 FFMPEG 作为后端,但 OSX 使用另一个库)所以我建议您使用 avi作为容器。

      最后,您将不得不调整图像大小(就像@ROAR 所说)或使用输入设备的尺寸,如下所示:

      width  = int(cap.get(3))
      height = int(cap.get(4))
      

      虽然如果您使用 h263 编解码器执行后者,则您必须使用生成符合大小限制的帧的输入设备。

      【讨论】:

        【解决方案4】:

        我的问题实际上是我的磁盘上没有剩余空间。它没有给出警告。

        【讨论】:

          猜你喜欢
          • 2014-06-06
          • 1970-01-01
          • 1970-01-01
          • 2023-01-16
          • 2012-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多