【问题标题】:matplotlib can't plot single channel or greyscale image pixelsmatplotlib 无法绘制单通道或灰度图像像素
【发布时间】:2020-04-23 08:13:50
【问题描述】:

我正在处理一个图像问题,当我不得不在网络训练之前检查图像绘制时突然在某个地方撞到了一块石头,我发现了一些奇怪的东西。我以为我的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)

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

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)

它绘制得非常好。为什么会这样?是什么导致pyplot 在使用 c=1 时抛出错误?

【问题讨论】:

标签: python numpy matplotlib keras


【解决方案1】:

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 图像,data4 是 RGBA 图像,data 是单通道图像,而 data1imshow() 尺寸不正确(使用 data1.squeeze(axis=2)而是)。

【讨论】:

  • 非常感谢。这个问题花了我几天的时间。
猜你喜欢
  • 2023-03-16
  • 2014-12-11
  • 2017-01-23
  • 2014-07-28
  • 2019-01-19
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多