首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中从离散像素值绘制图像的最快方法是什么?

在Python中从离散像素值绘制图像的最快方法是什么?
EN

Stack Overflow用户
提问于 2009-01-12 06:08:13
回答 3查看 70.5K关注 0票数 48

我希望根据计算的像素值绘制一幅图像,作为可视化某些数据的一种手段。从本质上讲,我希望获得一个2维的彩色三元组矩阵并渲染它。

请注意,这不是图像处理,因为我不是在转换现有图像,也不是做任何类型的全图像转换,它也不是矢量图形,因为我渲染的图像没有预先确定的结构-我可能会一次一个像素地生成无定形的彩色斑点。

我现在需要渲染大约1kx1k像素的图像,但一些可伸缩的图像会很有用。最终目标格式是PNG或任何其他无损格式。

我现在一直通过ImageDraw的draw.point使用PIL,我想知道,考虑到我需要的非常具体和相对基本的功能,有没有更快的库可用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-12 16:20:58

如果您有可用的numpyscipy (如果您正在使用Python语言操作大型数组,我建议您使用它们),那么scipy.misc.pilutil.toimage函数非常方便。一个简单的例子:

代码语言:javascript
复制
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下载numpyscipy。或者使用pip:

代码语言:javascript
复制
pip install numpy scipy
票数 38
EN

Stack Overflow用户

发布于 2009-01-12 11:57:49

代码语言:javascript
复制
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()会更快。

票数 21
EN

Stack Overflow用户

发布于 2018-01-25 04:11:45

要求

对于本例,请安装NumpyPillow

示例

目标是首先将您想要创建的图像表示为3 (RGB)数组的数组-出于性能和简单性考虑,请使用Numpy的array()

代码语言:javascript
复制
import numpy

data = numpy.zeros((1024, 1024, 3), dtype=numpy.uint8)

现在,将中间3个像素的RGB值设置为红色、绿色和蓝色:

代码语言:javascript
复制
data[512, 511] = [255, 0, 0]
data[512, 512] = [0, 255, 0]
data[512, 513] = [0, 0, 255]

然后,使用Pillow的Image.fromarray()从数组中生成一个图像:

代码语言:javascript
复制
from PIL import Image

image = Image.fromarray(data)

现在,“显示”图像(在OS X上,这将在预览中以临时文件的形式打开它):

代码语言:javascript
复制
image.show()

备注

这个答案的灵感来自于BADCODE的答案,它太过时了,不能使用,也太不同了,不完全重写就不能简单地更新。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/434583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档