python - cv2.kmeans 参数错误-python

标签 python opencv k-means

我对 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 中我不确定它是什么意思。

有什么帮助吗?

最佳答案

错误原因是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

关于python - cv2.kmeans 参数错误-python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567816/

相关文章:

python - 使用多个分割选择文本

matlab - 使用 k-mean 的灰度图像处理

hadoop - 在Hadoop Mapreduce示例上需要一些知识

machine-learning - 在K-Means聚类算法(sklearn)中如何将欧氏距离覆盖到某个距离

python - 有没有办法在 python 中调用左键单击?

python - IronPython - sys.exit() 上的正确资源释放

python - 调用数组时仅使用第一个元素?

c++ - Visual Studio 2008 出现错误 C3861 : '__cpuidex' : identifier not found when building OpenCV 2. 4.11

python - 如何使用 Django Streaming HTTPS Response 正确渲染图像?

linux - 如何为opencv而不是c++编译c