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