2012-04-29 9 views
1

私は、OpenCVのライブラリ(kmeans2)でクラスタリングアルゴリズム関数kmeansを適用しようとしていますオンOpenCVのクラスタリングが、各サンプル点は、4つの以上の値 (以上4つの機能)4つ以上のチャンネル

私が試してみますcvMatを使用してkmeans2のためのパラメータを準備してください。これは、何か値を出力したり割り当てたりする際に例外が発生します。ここ

は私がCvMatのパラメータを作成および操作するための正しい方法は何か

第一の方法

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アルゴリズム?

+0

私はopencvのpythonインターフェイスについて考えていませんが、どちらの場合も、チャンネル数が6であるため、動作しません。 – guinny

+0

いいえ動作しませんが、私はkmeansで動作しない4つ以上のチャネルを持つ行列を作成できます...解決策は1つのチャネルで行列を作成することでしたが、幅は(列なし)== features –

答えて

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 - 入力サンプルの浮動小数点行列、1サンプルあたり1行。

などの機能があります。

+0

ドキュメントを誤解していない、私はその解決策を試して、うまくいきませんでしたが、その理由はいくつかのエラーは、働いて、固定した後、いくつかのエラーを引き起こしたナノ値を持っていたということです –

+0

私はそのチュートリアルhttp:// stackoverflow .com/a/8813320/37980私は、私が特徴ベクトルにチャネルを使用しなければならないと信じさせた –

関連する問題