我用的是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() 的输入之前如何正确格式化我的数据
最佳答案
最后我得到了答案。我切换到 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')
现在一切都很完美。
关于python - 我如何格式化我的列表以将其作为 opencv3.0 中 svm.train() 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36110924/