我有一个大尺寸的2d numpy数组( size =(2000,2000))只有五个可能的值 1.0,2.0,3.0,4.0 和 5.0 。我想保存并将此数组显示为RGB彩色格式的图像,此处数组的每个唯一值应由不同的颜色表示。请帮助我是python的初学者。
答案 0 :(得分:1)
您可以使用PIL.Image
来执行此操作,但首先会转换您的数组。
你可以说,例如:
您当然可以将这些值更改为您选择的任何颜色,但这仅用于演示。话虽这么说,你的二维阵列也需要被压扁"到PIL的1-d.Image接受它作为数据。
from PIL import Image
import numpy as np
your_2d_array = np.something() # Replace this line, obviously
img_array = []
for x in your_2d_array.reshape(2000*2000):
if x == 1.0:
img_array.append((255,0,0)) # RED
elif x == 2.0:
img_array.append((0,255,0)) # GREEN
elif x == 3.0:
img_array.append((0,0,255)) # BLUE
elif x == 4.0:
img_array.append((0,0,0)) # BLACK
elif x == 5.0:
img_array.append((255,255,255)) # WHITE
img = Image.new('RGB',(2000,2000))
img.putdata(img_array)
img.save('somefile.png')
虽然这应该有用,但我认为有更有效的方法可以做到这一点,我不知道,所以如果有人用更好的例子编辑这个答案,我会很高兴。但如果它是一个小应用程序,并且最高效率并不会让您感到困扰,那么就是这样。
答案 1 :(得分:0)
matplotlib
对于此类任务非常有用,但还有其他方法。
这是一个例子:
import numpy as np
import matplotlib.image
src = np.zeros((200,200))
print src.shape
rgb = np.zeros((200,200,3))
print rgb.shape
src[10,10] = 1
src[20,20] = 2
src[30,30] = 3
for i in range(src.shape[0]):
for j in range(src.shape[1]):
rgb[i,j,0] = 255 if src[i,j]==1 else 0 # R
rgb[i,j,1] = 255 if src[i,j]==2 else 0 # G
rgb[i,j,2] = 255 if src[i,j]==3 else 0 # B
matplotlib.image.imsave('test.png', rgb.astype(np.uint8))
诀窍是将其转换为形状(x, y, 3)
的RGB数组。您可以使用任何您想要生成每像素RGB值的公式。
另外,请注意将其转换为uint8
数组。