我有一张尺寸为128x128x64
且尺寸为64
的3D图像,每张图片的尺寸为128x128。图像呈现三个类,标签是0背景,1个第一个对象,2秒对象。我正在使用matplotlib
来显示图片。
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(32,32))
ax1 = plt.add_subplot(111)
ax1.imshow(image[:, :, 32])
我想在彩色地图中显示它。其中,背景应为黑色,对象1为红色,对象2为绿色。我该如何修改代码?谢谢 预期结果类似于图的左下角
答案 0 :(得分:2)
你的问题不是很清楚。你说你想获得一个像左下图那样的结果,但是这个图像有阴影和各种级别的绿色和红色。
根据你的问题,我知道你有一个只有3个可能值的128x128数组:0.
(背景),1.
(第一个对象)和2.
(第二个对象)。那是对的吗?如果是这样,实质上你的问题归结为如何创建一个3级的离散色图,黑色,红色,绿色。
以下是我要做的事情:
# Generate some fake data for testing
img = np.zeros((128,128)) # Background
img[:50,:50] = np.ones((50,50)) # Object 1
img[-50:,-50:] = np.ones((50,50))*2 # Object 2
#>img
#>array([[ 1., 1., 1., ..., 0., 0., 0.],
# [ 1., 1., 1., ..., 0., 0., 0.],
# [ 1., 1., 1., ..., 0., 0., 0.],
# ...,
# [ 0., 0., 0., ..., 2., 2., 2.],
# [ 0., 0., 0., ..., 2., 2., 2.],
# [ 0., 0., 0., ..., 2., 2., 2.]])
# Create a custom discret colormap
from matplotlib.colors import LinearSegmentedColormap
cmap = LinearSegmentedColormap.from_list("3colors", ['k','r','g'], N=3)
# Plot
# Don't forget to includes the bounds of your data (vmin/vmax)
# to scale the colormap accordingly
fig,ax = plt.subplots()
im = ax.imshow(img, cmap=cmap, vmin=0, vmax=2)
ax.grid(False)
cax = fig.colorbar(im)
cax.set_ticks([0,1,2])