【问题标题】:numpy vstack with images带有图像的 numpy vstack
【发布时间】:2019-08-24 20:51:26
【问题描述】:

我正在编写一个函数来从图像中读取像素数据并将它们存储在一个 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)

这是一个失败的图片示例

【问题讨论】:

  • 在循环中使用vstack 很慢。最好像 y 那样积累一个列表
  • 谢谢,确实这样更快

标签: python numpy python-imaging-library


【解决方案1】:

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

具体来说,改变这一行:

im = Image.open(img_path)

到

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

或

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

【讨论】:

  • 感谢您的回复 - 图片是 RGB - 通过强制执行此转换,我仍然收到相同的错误消息ValueError: all the input array dimensions except for the concatenation axis must match exactly
  • 我担心您的某些图像可能会被调色,因此是单通道而不是 3 通道。下一个最佳想法是为每张图像打印im.size 和im.mode。
  • 这项检查已经为他们所有人进行了(128, 128) / RGB。
  • 你能分享列表中的第一张图片和第一张失败的图片吗?
  • 我上传了一张样本图片,数据集的任何一张图片都失败了。
猜你喜欢
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多