类型错误:只能将长度为1的数组转换为Python标量

时间:2015-11-28 19:47:46

标签: python opencv opencv3.0

我是openCV的初学者,我正在尝试分析数独求解器的现有代码。这部分代码会引发错误。

samples = np.float32(np.loadtxt('feature_vector_pixels.data'))
responses = np.float32(np.loadtxt('samples_pixels.data'))

model = cv2.ml.KNearest_create()
model.train(samples, responses)

错误如下Type Error: Only length-1 arrays can be converted to Python Scalars

完整的追溯如下:

C:\Study stuff\FinalProject>c:\Python27\python.exe Sudoku.py
Traceback (most recent call last):
  File "Sudoku.py", line 15, in <module>
    model.train(samples, responses)
TypeError: only length-1 arrays can be converted to Python scalars

知道问题是什么?

2 个答案:

答案 0 :(得分:12)

您收到的错误消息:

TypeError: Only length-1 arrays can be converted to Python Scalars

字面意思是:您在单个值单个元素的数组多个元素的数组>是预期的。

因此传递给调用model.train(samples, responses)的一个参数需要和标量......但是哪个?

查看KNearest class的最新文档,让我们看一下StatsModel.train method的签名:

  

virtual bool cv :: ml :: StatModel :: train(InputArray samples,int layout,InputArray response)

显然,添加了一个新的 layout 参数。但它的meaning在文档中有点模糊。

如果不了解您的文件内容,我无法判断您是否需要传递ROW_SAMPLECOL_SAMPLE,但是如果有这些信息,我可以找到similar question,其解决方案是将cv2.ml.ROW_SAMPLE作为第二个参数添加到火车方法中:

model.train(samples, cv2.ml.ROW_SAMPLE, responses) 

答案 1 :(得分:0)

由于在最新版本中进行了一系列重构操作而发生错误。 it’s documentation