如何将 Pillow 图像数据传递给 scikit-learn?

How to pass Pillow image data to scikit-learn?

我正在尝试在 scikit-learn 中训练图像分类器。我有一堆输入图像,我正在使用 Pillow 来处理它们。我的问题是关于将 Pillow 数据提供给 scikit-learn 的形状。

现在这是我的代码:

training = glob.glob('./img/training/*/*.bmp')
data = []
classes = []
for imagefile in training:
    edges = Image.open(imagefile).filter(ImageFilter.FIND_EDGES).convert("L")
    in_data = np.asarray(edges, dtype=np.uint8)
    data.append(in_data[0])
    if 'class1' in imagefile:
        classes.append('class1')
    else:
        classes.append('class2')
clf = svm.SVC(gamma=0.001, C=100.)
clf.fit(data, classes)

这运行没有错误,但我把代码放在一起相当粗略,我不确定它是否正确。

特别是,我不确定是否应该使用 in_data[0]。我这样做是因为使用 in_data 给我一个错误:ValueError: Found array with dim 3. Estimator expected <= 2.

除非您想要每个图像的图像矩阵的第一行(in_data[0] returns 您是第一行),否则您可能想要使用展平。

展平将获取图像矩阵的每一行,并将这些行放在一维向量中彼此后面。

所以变成了data.append(in_data.flatten())

您可以先将图像调整为较小的格式,以减少数据矩阵的列数。