Pyplot imshow 错误地将黑色输出为白色

Pyplot imshow incorrectly output black to white

我想绘制一些字母,并根据字母的宽度和高度将它们分成 4 个相等的区域。碰巧的是,一切看起来都很好,直到区域出现空白像素,例如 zone_0.jpg、zone_7 和 zone_12,如下图所示。我怎样才能使图像二维数组的每个值都为 255 的图像框打印成白色?

到目前为止,这是我的代码:

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()

因此每个区域变量(z11z12z21z22)都是二维 numpy 数组,其中每个单元格可以包含 0(将输出黑色)或 255(将输出白色)。

例如,关注 zone_0.jpgz22 变量将只包含值为 255 的单元格:

z11 将包含 0 或 255 个值的混合:

逻辑上应该没有问题,因为 255 应该总是输出白色,所以我想知道为什么会出现这种情况?

默认情况下,Matplotlib 始终缩放颜色图,使颜色图最小颜色为数据最小值,颜色图最大颜色为数据最大值。您可以只使用 0 和 1 作为数据值并获得相同的图像。如果您有数据 min = max,则显然设置了比例,以便显示将匹配颜色图 min.

要使用当前的 0、255 数据断言颜色图比例,请将以下内容添加到每个绘图调用中:vmin=0, vmax=255。这些强制颜色图范围而不是使用传递给绘图调用的数据。有关详细信息,请参阅 matplotlib.pyplot.imshow documentation - 所有 cmap-capable 绘图函数都支持此功能。