将彩色图像转换为libsvm的输入向量

时间:2012-11-16 05:18:51

标签: python computer-vision libsvm

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

感谢。

1 个答案:

答案 0 :(得分: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))

希望这会有所帮助。