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)
Несколько примеров того, как использовать функцию, доступны здесь: