繁体   English   中英

python - OpenCV VideoWriter 输出为空

[英]python - Output by OpenCV VideoWriter empty

我最近开始使用 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 文档(我没有遵循这个,只是为了确保,它也不起作用)

OS X 上 FourCC 编解码器的 GitHub 测试

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

您的框架宽度和高度必须与VideoWriter的宽度和高度VideoWriter 只需在out.write(frame)之前添加它,你就可以了:

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

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

最大的问题是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编解码器执行后者,则必须使用输出设备来生成符合大小限制的帧。

我解决了这个问题。 问题只是因为我无法将VideoWriter用于灰度,所以我不得不将它用于彩色框架。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM