only size-1 arrays can be converted to Python scalars

Python version: 3.6.5

Opencv version: 3.2.0

Jupyter notebook used

The source code is as follows:

import cv2
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

# Feature set containing (x,y) values of 25 known/training data
trainData = np.random.randint(0,100,(25,2)).astype(np.float32)

# Labels each one either Red or Blue with numbers 0 and 1
responses = np.random.randint(0,2,(25,1)).astype(np.float32)

# Take Red families and plot them
red = trainData[responses.ravel()==0]

# Take Blue families and plot them
blue = trainData[responses.ravel()==1]


newcomer = np.random.randint(0,100,(1,2)).astype(np.float32)

knn =

ret, results, neighbours ,dist = knn.findNearest(newcomer, 3)

print ("result: ", results,"\n")
print ("neighbours: ", neighbours,"\n")
print ("distance: ", dist)

The error is as follows:

TypeError                                 Traceback (most recent call last)
<ipython-input-21-b1c5cdca5e57> in <module>()
     20 knn =
---> 22 knn.train(trainData,responses)
     23 ret, results, neighbours ,dist = knn.findNearest(newcomer, 3)

TypeError: only size-1 arrays can be converted to Python scalars

Error reason:

Wrong parameter passed

The second parameter in the train function should be the layout of the array should be filled in according to the form of the passed in array_ Sample or SAMPLE

For example, mine is


Similar Posts: