我希望根据计算的像素值绘制一幅图像,作为可视化某些数据的一种手段。从本质上讲,我希望获得一个2维的彩色三元组矩阵并渲染它。
请注意,这不是图像处理,因为我不是在转换现有图像,也不是做任何类型的全图像转换,它也不是矢量图形,因为我渲染的图像没有预先确定的结构-我可能会一次一个像素地生成无定形的彩色斑点。
我现在需要渲染大约1kx1k像素的图像,但一些可伸缩的图像会很有用。最终目标格式是PNG或任何其他无损格式。
我现在一直通过ImageDraw的draw.point使用PIL,我想知道,考虑到我需要的非常具体和相对基本的功能,有没有更快的库可用?
发布于 2009-01-12 16:20:58
如果您有可用的numpy
和scipy
(如果您正在使用Python语言操作大型数组,我建议您使用它们),那么scipy.misc.pilutil.toimage
函数非常方便。一个简单的例子:
import numpy as np
import scipy.misc as smp
# Create a 1024x1024x3 array of 8 bit unsigned integers
data = np.zeros( (1024,1024,3), dtype=np.uint8 )
data[512,512] = [254,0,0] # Makes the middle pixel red
data[512,513] = [0,0,255] # Makes the next pixel blue
img = smp.toimage( data ) # Create a PIL image
img.show() # View in default viewer
好的是toimage
可以很好地处理不同的数据类型,所以浮点数的二维数组可以合理地转换为灰度等。
您可以从here下载numpy
和scipy
。或者使用pip:
pip install numpy scipy
发布于 2009-01-12 11:57:49
import Image
im= Image.new('RGB', (1024, 1024))
im.putdata([(255,0,0), (0,255,0), (0,0,255)])
im.save('test.png')
在图像的左上角放置一个红色、绿色和蓝色像素。
如果你更喜欢处理字节值,im.fromstring()
会更快。
发布于 2018-01-25 04:11:45
要求
示例
目标是首先将您想要创建的图像表示为3 (RGB)数组的数组-出于性能和简单性考虑,请使用Numpy的array()
:
import numpy
data = numpy.zeros((1024, 1024, 3), dtype=numpy.uint8)
现在,将中间3个像素的RGB值设置为红色、绿色和蓝色:
data[512, 511] = [255, 0, 0]
data[512, 512] = [0, 255, 0]
data[512, 513] = [0, 0, 255]
然后,使用Pillow的Image.fromarray()
从数组中生成一个图像:
from PIL import Image
image = Image.fromarray(data)
现在,“显示”图像(在OS X上,这将在预览中以临时文件的形式打开它):
image.show()
备注
这个答案的灵感来自于BADCODE的答案,它太过时了,不能使用,也太不同了,不完全重写就不能简单地更新。
https://stackoverflow.com/questions/434583
复制相似问题