【问题标题】:OpenCV VideoWriter: Issues with playing videoOpenCV VideoWriter:播放视频的问题
【发布时间】:2013-08-05 00:40:06
【问题描述】:

问题:

我在正确渲染/播放由 OpenCV 的 videowriter 创建的视频时遇到问题。

详情:

Python 不会吐出任何错误并成功运行/创建视频。当我尝试使用 VLC 播放视频时,看起来 VLC 正在尝试播放一个空视频(看起来它的时间长度为 00:00)。此外,视频大小仅为 5kbs。我已经将此函数与其他 NumPy 图像数组一起使用,并且它们有效。

我的 NumPy 数组准备代码:

for i in range(len(frames)-1):
    fig = PIV.runPIV(frames[i].astype(np.int32),frames[i+1].astype(np.int32),dt = self.context.attrs.dt)
    agg = fig.canvas.switch_backends(FigureCanvasAgg)
    agg.draw()  #This produces a successful image. Simple Quiver plot.

    image = np.fromstring(agg.tostring_rgb(),dtype = np.uint8)
    image.shape = agg.get_width_height() + (3,)
    images.append(image)
self._render(images)

图像数组:

[[[191 191 191]
  [191 191 191]
  [191 191 191]
  ...,

  [191 191 191]
  [191 191 191]
  [191 191 191]]]

注意:

该数组的形状为 (640,480,3),这与以前工作的其他数组类似相同。这与过去其他成功之间的唯一区别是,在我加载图像并在渲染之前对它们进行处理之前,但这个堆栈来自 matplotlib.pyplot,后端切换到了 FigureCanvasAgg;但是,当我保存图像在其 NumPy 转换之前时,图像看起来非常好

我的 OpenCV VideoWriter 代码:

def writeMovie(self, fileName, fps=20):
    isColor = len(self[0].shape) == 3
    writer = cv2.VideoWriter(fileName, 
                             fps=fps,
                             fourcc=cv2.cv.CV_FOURCC(*"PIM1"),
                             frameSize=self[0].shape[0:2], 
                             isColor=isColor)
    for image in self:
        if image.dtype == np.bool:
            image = image.astype(np.uint8)*255
        writer.write(image)

我很乐意尽我所能提供更多信息来澄清和帮助回答这个问题。任何意见/建议将不胜感激。

【问题讨论】:

    标签: python opencv video python-2.7 numpy


    【解决方案1】:

    不确定问题仍然存在,但我解决它的方法是将每个图像保存为一个文件,然后使用 ffmpeg 连接所有文件。

    【讨论】:

      【解决方案2】:

      当视频看起来是空的,那是因为你要放入视频的图片不符合视频参数。我在 C++ 中遇到了同样的问题,我的问题是输入大小和编解码器。

      我是 python 的新手,但我想你可能有同样的问题。也许您应该尝试打印 frameSize 和fourcc 以查看这些参数是否正确(不应该是self[0].shape[0:1] 吗?(同样,我对python不太了解,所以我在这一点上可能错了))

      【讨论】:

      • 感谢您的回答。我认为它一定与编解码器有关,但让我感到困惑的是 NumPy 数组与我使用的其他 numpy 数组具有完全相同的结构。如果大小不正确,videowriter 会吐出一个错误。 self[0].shape[0:1] 的元组大小为 1。索引的工作方式是包含第一个索引,而最后一个不包含。
      猜你喜欢
      • 1970-01-01
      • 2023-01-04
      • 2018-11-14
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多