如何将 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())
您可以先将图像调整为较小的格式,以减少数据矩阵的列数。
我正在尝试在 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())
您可以先将图像调整为较小的格式,以减少数据矩阵的列数。