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

时间:2016-02-07 17:51:31

标签: python scikit-learn classification pillow

我正在尝试在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.

1 个答案:

答案 0 :(得分:0)

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

展平将获取图像矩阵的每一行,并将行放在一个向量的后面。

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

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