首页 > 解决方案 > 带有图像的 numpy vstack

问题描述

我正在编写一个函数来从图像中读取像素数据并将它们存储在一个 numpy 数组中以进一步进行训练/测试拆分。

当我运行此代码时,它会抛出一个异常,指出除了连接轴之外的所有输入数组维度必须完全匹配。

我不确定为什么会发生此问题以及如何解决它。

from PIL import Image
import numpy as np
import os

X = np.array([])
y = []

categories = {
    'A': 1,
    'B': 2
}

root = data_dir + '/cropped_resized(128,128)/'

for path, subdirs, files in os.walk(root):
    for name in files:
        img_path = os.path.join(path,name)
        category = categories[os.path.basename(path)]
        im = Image.open(img_path)
        img_pixels = list(im.getdata())
        width, height = im.size
        X = np.vstack((X, img_pixels))
        #X = np.concatenate((X, img_pixels), axis=0)
        y.append(category)

X_train, X_test, y_train, y_test = train_test_split(X, y)

这是失败的图片示例

在此处输入图像描述

标签: pythonnumpypython-imaging-library

解决方案


确定您是否希望图像为 RGB 或灰度,并确保它们处于加载状态。

具体来说,更改此行:

im = Image.open(img_path)

im = Image.open(img_path).convert('RGB')

或者

im = Image.open(img_path).convert('L')

推荐阅读