我使用的是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()
的输入之前正确格式化数据答案 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')
现在每件事情都很完美。