2015-06-20 118 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。 –