Opencv群集超过4个通道

时间:2012-04-29 23:40:39

标签: python opencv numpy k-means

我正在尝试在opencv库(kmeans2)中应用kmeans聚类算法,但每个采样点都有超过4个值 (超过4个功能)

当我尝试使用cvMat为kmeans2准备参数时,每当我打印或为其指定任何值时,它都会引发异常。

这是我试过的两种方式

第一种方法

import cv
from numpy import *
a = zeros([20,1,6])
b = cv.fromarray(a)
print b[0,0]
OpenCV Error: One of arguments' values is out of range (The number of channels must be 1, 2, 3 or 4) in cvRawDataToScalar, file /build/buildd/opencv-2.3.1/modules/core/src/array.cpp, line 1531
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
cv2.error: The number of channels must be 1, 2, 3 or 4

第二种方法

import cv
from numpy import *
a = cv.CreateMat(20,1,cv.MAKETYPE(cv.CV_32F,6))
print a[0,0]
OpenCV Error: One of arguments' values is out of range (The number of channels must be 1, 2, 3 or 4) in cvRawDataToScalar, file /build/buildd/opencv-2.3.1/modules/core/src/array.cpp, line 1531
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
cv2.error: The number of channels must be 1, 2, 3 or 4

为kmeans算法创建和操作cvMat参数的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

你犯的错误是形成错误维度的矩阵。改变这个

a = zeros([20,1,6])

到这个

a = zeros([20,6,1])

和这个

a = cv.CreateMat(20,1,cv.MAKETYPE(cv.CV_32F,6))

到这个

a = cv.CreateMat(20, 6, cv.CV_32F)

您似乎误解了文档

  

samples - 输入样本的浮点矩阵,每个样本一行。

并在每列中都有这些功能。