此问题已在此处有答案:
Both 0 and 255 give black image for 'gray' color map, why is that?(1个答案)
14天前关闭
我想绘制一些字母,并根据字母的宽度和高度将它们分成4个相等的区域。碰巧的是,在一个区域出现空白像素之前,一切看起来都很好,例如zone_0.jpg,zone_7和zone_12,如下图所示。我怎样才能使图像框中的每个值都是255的图像2d数组被打印为白色?
以下是我目前为止的代码:
half_width = int(np.floor(width / 2))
half_height = int(np.floor(height / 2))
z11 = boxed[:half_height, :half_width]
z12 = boxed[:half_height, half_width:]
z21 = boxed[half_height:, :half_width]
z22 = boxed[half_height:, half_width:]
# plotting by zone
plt.figure(figsize=(4, 4), tight_layout=True)
plt.subplot(221)
plt.imshow(z11, cmap='gray')
plt.title('z11')
plt.subplot(222)
plt.imshow(z12, cmap='gray')
plt.title('z12')
plt.subplot(223)
plt.imshow(z21, cmap='gray')
plt.title('z21')
plt.subplot(224)
plt.imshow(z22, cmap='gray')
plt.title('z22')
plt.savefig(f'{zone_path}/zone_{i}.jpg')
plt.close()
因此,每个区域变量(z11
,z12
,z21
,z22
)都是2d numpy数组,其中每个单元格可以包含0(将输出黑色)或255(将输出白色)。
例如,关注zone_0.jpg
,z22
变量将只包含值为255的单元格:
但z11
将包含0或255个值的混合:
从逻辑上讲,应该没有问题,因为255应该总是输出为白色,所以我想知道为什么会发生这种行为?
1条答案
按热度按时间ac1kyiln1#
默认情况下,Matplotlib总是缩放色彩Map表,以便色彩Map表最小颜色是数据最小值,色彩Map表最大颜色是数据最大值。您可以只使用0和1作为数据值,并获得相同的图像。如果您有数据min = max,则显然设置了比例,以便显示将匹配色彩Map表min。
要使用当前0,255数据Assert颜色Map比例,请将以下内容添加到每个plot调用中:
vmin=0, vmax=255
。这些函数强制使用色彩Map表范围,而不是使用传递给plot调用的数据。有关详细信息,请参阅matplotlib.pyplot.imshow文档-所有支持cmap的绘图函数都支持此功能。