用cv2 VideoWri编写numpy数组

2024-04-26 00:39:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用opencv2.3.1 VideoWriter编写玩具示例视频时遇到问题,下面是我的操作方法:

writer = cv2.VideoWriter('test1.avi',cv.CV_FOURCC('P','I','M','1'),25,(640,480))
for i in range(1000):
    x = np.random.randint(10,size=(480,640)).astype('uint8')
    writer.write(x)
#del writer (with or without tested)

我尝试了所有可能的组合,如果扩展名是mpg,则使用0字节的文件,如果扩展名是avi,则使用5.5kb。我应该说有人指出,我应该从源代码构建ffmpeg库,而不是从源代码获取它。好吧,我是在一台新的机器上,在这个网站的帮助下做的http://vinayhacks.blogspot.com/2011/11/installing-opencv-231-with-ffmpeg-on-64.html。在编译opencv时也出现了一个错误(该错误与ffmpeg有关)。现在我真的想不通了,怎么用OPENCV生成视频呢?

提前谢谢


Tags: 示例视频源代码错误withcv2opencvcv
3条回答

你在用哪个操作系统?您确定您的系统安装了PIM1编解码器吗?

我使用windows,可以对未压缩的视频使用cv.FOURCC(*"DIB "),也可以使用-1来显示编解码器对话框。

安装完ffdshow后,我可以使用cv.FOURCC(*"ffds")对视频进行MPEG-4编码。

你好,我是新来的opencv,我有同样的问题。writer.write(x)需要x是带有RGB值的数组,而不是标量。我这样做解决了这个问题:

import cv2
import cv2.cv as cv
import numpy as np

writer = cv2.VideoWriter('test1.avi',cv.CV_FOURCC('P','I','M','1'),25,(640,480))
for i in range(1000):
    x = np.random.randint(255,size=(480,640)).astype('uint8')
    x = np.repeat(x,3,axis=1)
    x = x.reshape(480, 640, 3)
    writer.write(x)

我想有更干净的方法做这件事,但我没有找到任何。

VideoWriter的最后一个参数isColor具有默认值True。 因此,如果将其更改为False,则可以编写二维数组。

import cv2
import numpy as np

writer = cv2.VideoWriter('test1.avi', cv2.VideoWriter_fourcc(*'PIM1'), 25, (640, 480), False)
for i in range(100):
    x = np.random.randint(255, size=(480, 640)).astype('uint8')
    writer.write(x)

相关问题 更多 >