如何保存和显示2d numpy数组作为RGB伪彩色图像?

时间:2017-07-03 16:57:31

标签: python image numpy save

我有一个大尺寸的2d numpy数组( size =(2000,2000))只有五个可能的值 1.0,2.0,3.0,4.0 5.0 。我想保存并将此数组显示为RGB彩色格式的图像,此处数组的每个唯一值应由不同的颜色表示。请帮助我是python的初学者。

2 个答案:

答案 0 :(得分:1)

您可以使用PIL.Image来执行此操作,但首先会转换您的数组。

你可以说,例如:

  1. 1.0应为红色,表示为(255,0,0)
  2. 2.0应为绿色 - > (0,255,0)
  3. 3.0应为蓝色 - > (0,0,255)
  4. 4.0应为黑色 - > (0,0,0)
  5. 5.0应为白色 - > (255,255,255)
  6. 您当然可以将这些值更改为您选择的任何颜色,但这仅用于演示。话虽这么说,你的二维阵列也需要被压扁"到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数组。