使用cv2 VideoWriter写入numpy数组
我在用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库,而不是用apt-get安装。于是我在一台新机器上按照这个网站的帮助进行了编译:http://vinayhacks.blogspot.com/2011/11/installing-opencv-231-with-ffmpeg-on-64.html。但在编译opencv时也出现了错误(这个错误和ffmpeg有关)。现在我真的不知道该怎么做了,怎样才能用OPENCV生成视频呢?
提前谢谢你们!
3 个回答
1
你在用哪个操作系统?你确定你的系统里安装了PIM1编码器吗?
我用的是Windows系统,我可以用cv.FOURCC(*"DIB ")
来处理未压缩的视频,或者用-1来显示一个编码器选择对话框。
安装了ffdshow之后,我可以用cv.FOURCC(*"ffds")
来用MPEG-4格式编码视频。
5
你好,我是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)
我想可能还有更简单的方法,但我还没有找到。
11
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)