2013-01-21 32 views
2

我有多个jpeg图像作为字符串存储在内存中。我想从它们生成一个视频(所以这些图片将成为视频中的帧)。OpenCV Python绑定:我如何从内存中捕获图像

我该怎么做?

+0

你是什么意思是“在存储器中作为字符串存储的jpeg图像”?你的意思是给出一些jpeg文件的名字?或者这些图像的内容在内存中? – fireant

回答

4

如果您有一组字符串分别代表一个图像,则可以将StringIOPIL组合起来读取,而不将它们保存到文件中。然后通过使用numpyPIL图像转换为OpenCV。此外,更新您的代码以使用新的OpenCV绑定。

这里有一个例子是复制你有什么(sys.argv中[1]假设为输出的视频文件的名字),你可能需要调整视频编解码器:

import sys 
import numpy 
import cv 
import cv2 
from cStringIO import StringIO 
from PIL import Image 

out_video = cv2.VideoWriter() 
fourcc = cv.CV_FOURCC('D', 'I', 'V', 'X') 
fps = 30 
color = True 

size = None 
for fname in sys.argv[2:]: 
    data = open(fname).read() # Your String 

    s = StringIO(data) 
    img = Image.open(s) 
    if size and img.size != size: 
     img = img.resize(size) 
    else: 
     size = img.size 
     out_video.open(sys.argv[1], fourcc, fps, size, color) 
    out_video.write(cv2.cvtColor(numpy.array(img), cv2.COLOR_RGB2BGR)) 
+0

噢,我的上帝......我已经拥有了内存中的图像数据,并且我想制作一个视频。所以现在我必须将它写入临时文件,再次将它读入内存,然后将视频写入文件。这真的很糟糕。 –

+0

这是很好的视频存档:) – mmgp

+0

对不起,我对你的评论感到莫名其妙。你的意思是把视频保存到文件是好事吗?我确实想将视频保存到一个文件中,只是不满意将图像保存到文件中。 –