OpenCV VideoWriter:播放视频的问题

时间:2013-08-04 01:39:13

标签: python opencv video python-2.7 numpy

问题:

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

详细信息:

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 ,其后切换到了ImageCanvasAgg;但是,当我在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)

我很乐意提供更多信息,以便我能够澄清并帮助回答这个问题。任何意见/建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

当视频显示为空时,这是因为要放入视频的图像不符合视频参数。我在C ++中遇到了同样的问题,我的问题是输入大小和编解码器。

我是python中的新手,但我认为你可能会遇到同样的问题。也许你应该尝试打印frameSize和fourcc来看看这些参数是否正确(不应该是self[0].shape[0:1]?(再次,我不太了解python,所以我可能在这一点上错了))

答案 1 :(得分:0)

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