2015-06-20 114 views
2

我從rgb值的形式從網絡攝像機獲取一些幀數據。將多維數組轉換爲python中的元組

import numpy as np  
frame = get_video() 
print np.shape(frame) 

輸出是(480,640,3)。現在我想從這些值構建圖像。所以,我想用

im = Image.new("RGB", (480, 640),frame) 

但是,這裏第三個參數需要一個元組。我得到這個錯誤

SystemError: new style getargs format but argument is not a tuple 

所以,我的問題是什麼是該幀數據轉換成一個元組,這樣我可以構建我的形象的最好方式。

+0

是什麼get_video()給? –

+0

get_video()獲取視頻幀的RGB值。所以基本上幀包含480x640 RGB值。 – user3288346

回答

0

我發現此實現更快

from PIL import Image 

im = Image.new("RGB", (480, 640), (0, 0, 0)) #initialize 480:640 black image 
while True: 
frame = get_video() 
im = Image.fromarray(frame) 
im.save('some-name', 'JPEG') 
1

我在這裏假設你正在從PIL導入類圖像。

Image.new()的文檔,通過控制檯命令Image.new訪問?是:

In [3]:Image.new?
類型:功能
基類:
字符串形式:
命名空間:互動
文件:/usr/lib/python2.7/dist-packages/PIL/Image.py
定義:Image.new(模式,大小,顏色= 0)
Docstring:創建一個新圖像

第三個參數是RGB顏色,例如(255,255,255),以填充孔圖像。您無法使用此功能初始化單個像素。我也假設幀是一個3D數組。正如你的輸出所暗示的那樣,它有480行和640行RGB元組。

我不知道是否有這樣做一個簡單的方法,但我會用的putpixel()函數設置的像素值,是這樣的:

im = Image.new("RGB", (480, 640), (0, 0, 0)) #initialize 480:640 black image 
for i in range(480): 
    for j in range(640): 
     im.putpixel((i, j), tuple(frame[i][j])) 

通過控制檯經常檢查文檔字符串,它可以節省很多時間。我也推薦使用ipython作爲你的控制檯。

+0

非常感謝。如果用im.putpixel((i,j),元組(frame [i] [j])替換im.putpixel((i,j),frame [i] [j])',我會接受你的答案。 )'。它運行良好,但我實際上試圖直播這個視頻,它運行速度非常慢。有一個更好的方法嗎? – user3288346

+0

完成。這可能是一種更好的方式,我從來沒有使用過PIL。 –