2013-01-21 34 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

對不起,我對你的評論感到莫名其妙。你的意思是把視頻保存到文件是好事嗎?我確實想將視頻保存到一個文件中,只是不滿意將圖像保存到文件中。 –