在python中将多维数组转换为元组

时间:2015-06-20 05:24:07

标签: python arrays stdtuple

我以rgb值的形式从网络摄像头获取一些帧数据。

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

所以,我的问题是将这个帧数据转换为元组的最佳方法是什么,以便我可以构建我的图像。

2 个答案:

答案 0 :(得分:1)

我在这里假设您要从PIL导入类Image。

Image.new()的文档,使用控制台命令Image.new访问?是:

在[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作为您的控制台。

答案 1 :(得分: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')