使用Python、OpenCV和numpy数组创建灰度视频

1 投票
1 回答
1982 浏览
提问于 2025-04-17 04:02

我正在使用32位的Python和OpenCV 2.3.1。我想把二维的numpy数组写入一个OpenCV的视频写入器。我的代码大概是这样的:

import cv2 as cv
import numpy as np

fourcc = cv.cv.CV_FOURCC('D', 'I', 'V', 'X')
writer = cv.cv.CreateVideoWriter("test.mpg", courcc, 10, (256,256))
if not writer:
     print "Error"
     sys.exit(1)

for ii in range(numberOfFrames):    
    numpy_image = GetFrame(ii)    #Gets a random image

    cv_image = cv.cv.CreateImage((256,256), cv.IPL_DEPTH_8U, 1)
    cv.cv.SetData(cv_image, numpy_image.tostring(), numpy_array.dtype.itemsize*1*256)

    cv.cv.WriteFrame(writer, cv_image)

del writer

我可以看到我的numpy数组里有正确的数据。如果我尝试从iplImage中读取数据,我发现数据还在。但是,写入帧似乎没有任何反应。没有生成文件,也没有报错。我可能哪里做错了呢?谢谢大家的帮助。

1 个回答

1

我之前从来没用过OpenCV,不过我可以分享一下我的经验。我是通过把numpy数组传给mencoder来把它们写成视频文件的(这个方法是基于VokkiCoder的VideoSink类,详细内容可以在这里找到)。这个方法非常快,而且看起来也很可靠,而且它还能写出RGB格式的视频。

这是一个链接,里面有相关的代码。它还包括一个VideoSource类,可以用类似的方法把电影文件读取成numpy数组。

撰写回答