【问题标题】:How can i format my list to give it as input to svm.train() in opencv3.0如何格式化我的列表以将其作为 opencv3.0 中 svm.train() 的输入
【发布时间】:2016-07-06 18:35:20
【问题描述】:

我用的是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() 的输入之前正确格式化数据

【问题讨论】:

  • map(int, training_set) 之后你期望得到什么?现在您正尝试在array([119, ..., 255], dtype=uint8) 上致电int。当然是错的。
  • @AleksandrKovalev 我期待该列表将被转换为 int。什么是正确的方法?我用谷歌搜索并最终找到了stackoverflow.com/questions/7368789/…
  • 你有数组列表。转换后你想得到什么?简单的整数列表?还是整数列表?
  • 顺便说一句,你用python2还是python3?
  • @AleksandrKovalev 我想要 trainining_set=list of lists,training_label=training_set 中每个列表的标签。当我直接给这个 svm.train(training_set,cv2.ml.ROW_SAMPLE,training_labels) 我收到错误:TypeError: samples 不是 numpy 数组,也不是标量

标签: python opencv numpy image-processing svm


【解决方案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')

现在一切都很完美。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-26
    • 2021-04-15
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多