[英]OpenCV VideoWriter: Issues with playing video
我在正确渲染/播放由OpenCV的视频编写器创建的视频时遇到问题。
Python不会吐出任何错误,而是可以成功播放/创建视频。 当我尝试使用VLC播放视频时,似乎VLC尝试播放空视频(时间长度为00:00)。 此外,视频大小仅为5kbs。 我已经将此函数与其他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转换之前保存图像时,该图像看起来非常好 。
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)
我将竭尽所能提供更多信息,以阐明并帮助回答该问题。 任何建议/建议将不胜感激。
当视频似乎为空时,这是因为要放入视频中的图像不适合视频参数。 我在C ++中有一个等效的问题,我的问题是输入大小和编解码器。
我是python的新手,但我认为您可能有同样的问题。 也许您应该尝试打印frameSize和fourcc来查看这些参数是否正确(它不应该是self[0].shape[0:1]
吗?(同样,我对python的了解不多,所以我可能是在这一点上是错误的))
不确定问题仍然存在,但是我解决该问题的方法是将每个图像保存为文件,然后使用ffmpeg连接所有文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.