从数组中读取图像会输出无效的形状错误

Reading image from array outputs invalid shape error

我对处理 Python 中的图像非常陌生。我有一项任务要求我对图像进行一些预处理,这些图像是从 NPZ 文件中提供给我的。然后,我将数据分为训练、验证和测试,这就是它的样子:

train_set = PathMNIST(mode="train") #89996
val_set = PathMNIST(mode="val") #10004
test_set = PathMNIST(mode="test") #7180

print(len(train_set))
print(len(val_set))
print(len(test_set))

集合中的每个项目如下所示:

(array([220, 208, 227, ..., 222, 209, 228], dtype=uint8), 0)

所以,按照我的理解,它是一个元组,其中第一个位置代表图像,第二个位置代表标签。我想要做的是将第一个位置的数组作为图像读取,这样我就可以对其应用一些预处理。但是,当我尝试绘制它时,出现 Invalid shape 错误:

plt.figure(figsize=(10, 10))
for i, (images, labels) in enumerate(train_set):
  ax = plt.subplot(3, 3, i + 1)
  plt.imshow(images)
  plt.title(np.argmax(labels[i]))
  plt.axis("off")

#output: TypeError: Invalid shape (2352,) for image data

所以我想我的问题是:我如何将该数组读取为图像并将其视为图像?我查看了 和相关主题,但我无法让它适用于我的场景。

您的数组是一维数组,大小为 2352。

正如Christoph所说,MNIST数据集中的每个数据点都是一个大小为(28 * 28 * 3)的RGB图像。并且它们中的每一个都被展平为大小为 2352 的一维数组。

我们可以使用 numpy 重塑它:

b = np.reshape(a, (28, 28,3))