2

我有一组标记的训练图像(颜色)。我想将这些图像用作 libsvm 的输入。是否有 python 库/函数/代码可以帮助我将此彩色图像转换为 libsvm 将接受作为输入的格式?

谢谢。

4

1 回答 1

3

当我在 python 中完成此操作时,我只是将图像转换为一个数组(尽管我一直在处理灰度图像),例如:

outpath="images\\ts\\"
fp = open(outpath + 'trainingset.dump','wb');
dirList = os.listdir(path)
for fname in dirList:
if '.jpg' in fname:
    im = array(Image.open(path + "\\" + fname).convert('L'))
    pickle.dump(im,fp)
    pickle.dump(1,fp)
fp.close()

在将其传递给 libsvm 时,您需要将其转换为列表:

path="images\\ts\\trainingset.dump"
fp = open(path, "r")
im = pickle.load(fp)
label = pickle.load(fp)
imlist = im.tolist()
imlist = [item for sublist in imlist for item in sublist]
y.append(label)
x.append(imlist)

print "Setting up the SVM problem"
prob = svm_problem(y, x)

param = svm_parameter('-t 2 -g 0.00001')
param.C = 1

print "Starting the training process"
m=svm_train(prob, param)

print "Storing the model"

svm_save_model(model, m)

请注意,虽然我有使用 libsvm 的经验,但我大部分时间都在 C++ 上使用它。我是 python 新手,这可能不是最好的方法,它只是对我有用的方式。另外,如果您想保持颜色,可以尝试不将图像转换为灰度,我自己没有尝试过,但这应该可以,而不是:

im = array(Image.open(path + "\\" + fname).convert('L'))

用这个:

im = array(Image.open(path + "\\" + fname))

希望这会有所帮助。

于 2012-11-16T12:18:51.987 回答