在Python中将3个单独的numpy数组组合成一个RGB图像

2024-05-13 01:57:16 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一组数据,我可以把它们转换成R,G,B波段的独立numpy数组。现在我需要把它们组合起来形成一个RGB图像。

我试着用“图像”来做这项工作,但它需要“模式”来归因。

我想耍个花招。我会使用Image.fromarray()将数组转换为图像,但当Image.merge要求合并“L”模式图像时,默认情况下它会达到“F”模式。如果我首先声明fromrarray()中的array属性为'L',所有的R G B图像都会失真。

但是,如果我保存图像,然后打开它们,然后合并,它工作得很好。图像以“L”模式读取图像。

现在我有两个问题。

首先,我认为这不是一种优雅的工作方式。如果有人知道更好的方法,请告诉我

其次,Image.SAVE不能正常工作。以下是我面临的错误:

In [7]: Image.SAVE(imagefile, 'JPEG')
----------------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

/media/New Volume/Documents/My own works/ISAC/SAMPLES/<ipython console> in <module>()

TypeError: 'dict' object is not callable

请提出解决办法。

请注意,图像大约是4000x4000大小的数组。


Tags: 数据图像imagenumpysave波段模式情况
3条回答
rgb = np.dstack((r,g,b))  # stacks 3 h x w arrays -> h x w x 3

还要转换浮点0。。1到uint8 s

rgb_uint8 = (np.dstack((r,g,b)) * 255.999) .astype(np.uint8)  # right, Janna, not 256

我不太理解你的问题,但这里有一个我最近做过的类似事情的例子,似乎有帮助:

# r, g, and b are 512x512 float arrays with values >= 0 and < 1.
from PIL import Image
import numpy as np
rgbArray = np.zeros((512,512,3), 'uint8')
rgbArray[..., 0] = r*256
rgbArray[..., 1] = g*256
rgbArray[..., 2] = b*256
img = Image.fromarray(rgbArray)
img.save('myimg.jpeg')

我希望能帮上忙

在将numpy数组传递给Image.fromarray之前,将其转换为uint8

如果你有浮动在[0..1]范围内:

r = Image.fromarray(numpy.uint8(r_array*255.999))

相关问题 更多 >