如何格式化我的列表以将其作为opencv3.0中svm.train()的输入

时间:2016-03-20 06:37:16

标签: python opencv numpy image-processing svm

我使用的是opencv3.0,我的IDE是pycharm

我有两个列表,一个training_set列表和一个trainig_labels列表。 training_set是一个列表,如

[array([119, 122,  91, ..., 185,  80, 255], dtype=uint8), array([112, 106,   120, ..., 121, 138, 255], dtype=uint8), ....... ]

training_labels是training_set.training_labels中每个列表的标签列表,如下所示

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

但是当我尝试将其传递给svm.train()

svm = cv2.ml.SVM_create()

trainingdata =  map(int, training_set)
responses = map(int, training_labels)

svm.train(trainingdata,responses,params=svm_params)
svm.save('svm_data.dat')

我收到此错误

trainingdata =  map(int, training_set)
TypeError: only length-1 arrays can be converted to Python scalars

如何在将数据作为svm.train()

的输入之前正确格式化数据

1 个答案:

答案 0 :(得分:1)

最后我得到了答案。我切换到opencv2.4。我修改了我的代码

trainData=np.float32(training_set)
responses=np.float32(training_labels)
svm = cv2.SVM()
svm.train(trainData,responses, params=svm_params)
svm.save('svm_data.dat')

现在每件事情都很完美。