我有一组标记的训练图像(颜色)。我想使用这些图像作为libsvm的输入。 是否有python库/函数/代码可以帮助我将这个彩色图像转换为libsvm将接受的格式作为输入?
感谢。
答案 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))
希望这会有所帮助。