从数组中读取图像会输出无效的形状错误
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))
我对处理 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))