cv2.kmeans ошибка с параметрами -python

Я немного новичок в cv2, и у меня появляется следующая ошибка

Сначала я получаю дескрипторы ORB изображения со следующим кодом:

import cv2
img = cv2.imread('messi.jpg',0) 
orb = cv2.ORB_create()
cv2.ocl.setUseOpenCL(False)
kp, des = orb.detectAndCompute(img, None)

Функция обнаружила 500 ключевых точек, каждая с размерностью 32. Если я сделаю:

des.shape

Я получил:

(500L,32L) 

Кроме того, я хочу получить центроиды дескрипторов, используя kmeans. Это мой код:

iterations = 10
epsilon = 1.0
k = 64
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, iterations, epsilon)
compactness, labels, centers = cv2.kmeans(des, k ,None ,criteria, iterations, cv2.KMEANS_RANDOM_CENTERS)

Я получаю ошибку:

 error: C:\builds\master_PackSlaveAddon-win64-vc12
 static\opencv\modules\core\src\kmeans.cpp:230: error: (-215) data0.dims <= 2
 && type == CV_32F && K > 0 in function cv::kmeans

Я видел потоки на эту ошибку для C++, и обычно это была проблема с размерностью изображения или типом изображения, но в Python я не уверен, что это означает.

Любая помощь?

1 ответ

Причина ошибки заключается в том, что первый параметр функции cv2.kmeans должен быть массивом типа данных32.

Поэтому введение следующей строки кода решает проблему:

des = np.float32(des)

Несколько примеров того, как использовать функцию, доступны здесь:

http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_ml/py_kmeans/py_kmeans_opencv/py_kmeans_opencv.html

Другие вопросы по тегам