我有一个大尺寸的2D numpy的阵列(大小=(2000,2000))仅具有五个可能值1.0,2.0,3.0,4.0和 5.0 。我想将这个数组保存并显示为RGB彩色格式的图像,这里每个数组的唯一值应该用不同的颜色表示。请帮助我是python的初学者。如何将2d numpy数组保存并显示为RGB伪彩色图像?
1
A
回答
1
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
阵列。
1
你可以使用PIL.Image
来做到这一点,但首先转换你的数组。
可以说,例如,认为:
- 1.0应该是红色,表示为(255,0,0)
- 2.0应该是绿色 - >(0,255,0)
- 3.0应为蓝色 - >(0,0,255)
- 4.0应该是黑色的 - >(0,0,0)
- 5.0应该是白色 - >(255,255,255)
当然,您可以将这些值更改为您选择的任何颜色,但这仅用于演示。话虽如此,你的二维数组也需要被“扁平化”为1-d,以便PIL.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
谢谢Ofer Sadan ... –
相关问题
- 1. 如何重塑存储彩色图像序列(RGB)的numpy数组的数据?
- 2. 如何将numpy数组转换为(并显示)图像?
- 3. numpy的转化RGB图像YIQ色彩空间
- 4. 为什么不显示彩色图像?
- 5. 显示numpy数组由rgb(255,255,255)作为图像,为什么它输出纯黑色而不是纯白色?
- 6. 将2d数组显示为地图
- 7. Python:如何有效地将2d numpy数组保存到磁盘?
- 8. 如何从RGB像素数组中保存图像?
- 9. 如何在图像视图中显示色彩颜色
- 10. 用`gdal`将大彩色图像保存为`GTiff`
- 11. 如何将HTML表格单元格显示为彩色像素?
- 12. 如何使用Opencv 2.4将python numpy数组转换为RGB图像?
- 13. 如何将3个通道的RGB PIL图像转换为numpy数组?
- 14. Kinect不显示彩色图像
- 15. 如何在RGB图像中将红色与蓝色交换并保持亮度?
- 16. Android - 保存布局作为图像显示黑色图像
- 17. Matlab从数组中创建图像并保存而不显示
- 18. 安排一个numpy数组来表示物理排列与2d彩色阴谋
- 19. 如何将2d列表转换为2d numpy数组?
- 20. 显示NumPy数组作为不断更新图像与Glumpy
- 21. 如何使用2d rgb数组在C++中创建图像?
- 22. C# - 如何将图像转换为8位彩色图像?
- 23. 如何有效地将2d numpy数组转换为1d numpy元组数组?
- 24. 如何将一系列数组转换为2D numpy数组
- 25. 如何在C++中创建伪彩色图像?
- 26. 保存图像并显示它
- 27. 如何将图像颜色从RGB 24位量化为RGB 6位(64色)?
- 28. 如何保存在sRGB色彩图像轮廓
- 29. 如何将图像保存为图像
- 30. 从Windows Phone中的图像中选取RGB彩色像素
谢谢先生......我已经这样做了。 –
不是问题!你能接受我的回答吗? – keredson
先生,我是在stackoverflow.com上新注册的。只要我的声望超过15,我已经接受了你的回答。我的接受将会出现。再次感谢你帮助我 –