我以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
所以,我的问题是将这个帧数据转换为元组的最佳方法是什么,以便我可以构建我的图像。
答案 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')