matplotlib 无法绘制单通道或灰度图像像素

Des*_*wal 5 python numpy matplotlib keras

我正在处理一个图像问题,当我必须在网络训练之前检查图像绘制时,突然在某个地方碰了石头,我发现了一些奇怪的东西。我以为我的ImageDataGenerator工作不正常,但事实确实如此matplotlib。我使用灰度图像。

所以如果你使用

data4 = np.random.randint(low=0,high=255,size=(137,236,4))
data3 = np.random.randint(low=0,high=255,size=(137,236,3))
data1 = np.random.randint(low=0,high=255,size=(137,236,1))

pyplot.imshow(data4)
pyplot.imshow(data3)

Run Code Online (Sandbox Code Playgroud)

它很好地绘制了随机噪声,但是当你这样做时,

pyplot.imshow(data1)它抛出一个错误Invalid shape (137, 236, 1) for image data

但又为了

data = np.random.randint(low=0,high=255,size=(137,236))
pyplot.imshow(data)

Run Code Online (Sandbox Code Playgroud)

它策划得很好。为什么会发生这种情况?是什么导致pyplot使用 c=1 时抛出错误?

And*_*dyK 7

Matplotlib 可以绘制单通道图像。从imshow的文档中,输入 X 是:

X :类似数组或 PIL 图像 图像数据。支持的数组形状有:

  • (M,N):具有标量数据的图像。数据使用颜色图进行可视化。

  • (M, N, 3):具有 RGB 值(0-1 float 或 0-255 int)的图像。

  • (M,N,4):具有 RGBA 值(0-1 float 或 0-255 int)的图像,即包括透明度。

前两个维度(M、N)定义图像的行和列。

超出范围的 RGB(A) 值将被剪裁。

因此,data3假设您的图像是 RGB 图像、data4RGBA 图像、data单通道图像,而 的data1尺寸不正确imshow()data1.squeeze(axis=2)请改为使用)。