假设256灰度图像,
如何修改颜色贴图plt.cm.gray,以便给定灰度值的像素以给定颜色(红色,蓝色......)出现。例如,如何将value = 1的像素设置为红色,将value = 2的像素设置为绿色?
我了解masked array example。但在该示例中,似乎只能设置一种颜色。
我尝试生成自定义cmap" agrey" (失败了):
## try to make a custom cmap
Ngrey = 256
a = np.linspace(0,1,num=Ngrey, endpoint=True)
A = np.array((a,a,a)).transpose()
#Set pixel with greylevel=1 to red
A[1,1:3]=0
col_dict = {'red':A,'green':A, 'blue':A}
print col_dict['blue'].shape
agrey = LinearSegmentedColormap('mygray', col_dict)
答案 0 :(得分:3)
当您处理离散灰度时,不是使用LinearSegmentedColormap
,而是使用ListedColormap
,您可以在其中定义256个灰度值,然后覆盖您想要着色的值。下面是一个随机图片的最小例子:
from matplotlib import pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np
pic = np.random.randint(256, size=(100,100))
Ngrey = 256
greys = np.linspace(0,1,Ngrey)
colors = [[g,g,g] for g in greys]
red = [1,0,0]
green = [0,1,0]
blue = [0,0,1]
colors[5] = red
colors[100] = blue
colors[200] = green
mymap=ListedColormap(colors)
plt.matshow(pic, cmap=mymap)
plt.show()
在Python 3.5