【问题标题】:Convert a color image to input vector for libsvm将彩色图像转换为 libsvm 的输入向量
【发布时间】:2012-11-04 20:14:50
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: python computer-vision libsvm


    【解决方案1】:

    当我在 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))
    

    希望这会有所帮助。

    【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多