0

-Lucas-kanadeアルゴリズムを使用して、openCVでビデオシーケンスのオプティカルフローを計算しています。モーションベクトルを取得しました。次に、これらの動きベクトルをいくつかのクラスターにグループ化します。互いに近くにあるベクトルをグループ化したい。最近傍アプローチのようなもの。しかし、どうすれば同じように実装できるのかわかりません。どんな助けでもありがたいです。

ありがとうございました。

オプティカルフローアルゴリズムを実行した後、cvKMeans2()を使用してコーナーポイントをグループ化しました...

ベクトルclustercontainerのベクトルにクラスターがあります。今、私はすべてのクラスターの周りに境界線を描きたいです..どうすればそうできるかわかりません...誰かが知っているなら助けてください。

openCVマニュアルの以下のコードを使用して、すべてのクラスターの周りに円を描きます。しかし、円ではなく長方形を描きたいのですが、どんな体でも助けてください。

    for(int h = 0; h < clusterContainer.size(); h++ )
        {

           CvPoint pt1,pt2;
               CvMat box[100];

           pt1.x=(int)points->data.fl[h*2];
           pt1.y=(int)points->data.fl[h*2+1];
              cvCircle( frame1, pt1, 20, CV_RGB(255,255,0),4);

}

ここに画像の説明を入力してください

4

3 に答える 3

1

一連のポイントから外接する四角形を取得するには、OpenCVのboundingRect()関数を使用できます。同様のfitEllipse()関数にも注意してください。

boundingRect
ポイントセットの直立した外接長方形を計算します。

C++: Rect boundingRect(InputArray points)  
Python: cv2.boundingRect(points) → retval
C: CvRect cvBoundingRect(CvArr* points, int update=0 )
Python: cv.BoundingRect(points, update=0) → CvRect

パラメータ:points – std::vectorまたはMatに保存された入力2Dポイントセット。
この関数は、指定されたポイントセットの最小の直立した外接長方形を計算して返します。

fitEllipse2D
ポイントのセットの周りに楕円をフィットさせます。

C++: RotatedRect fitEllipse(InputArray points)
Python: cv2.fitEllipse(points) → retval
C: CvBox2D cvFitEllipse2(const CvArr* points)
Python: cv.FitEllipse2(points) → Box2D

パラメータ:ポイント–入力2Dポイントセット、保存場所:

std::vector<> or Mat (C++ interface)
CvSeq* or CvMat* (C interface)
Nx2 numpy array (Python interface)

この関数は、(最小二乗の意味で)2Dポイントのセットに最もよく適合する楕円を計算します。楕円が内接する回転した長方形を返します。アルゴリズム[Fitzgibbon95]が使用されます。

于 2012-11-06T08:56:35.780 に答える
1

KMEANアルゴリズムを使用して、同様の方向と大きさの動きベクトルをグループ化しました。

于 2014-09-25T00:30:57.223 に答える
0

サンプル画像で、方向が同じで互いに近いベクトルをグループ化するのはなぜですか?
画像内の2Dでの移動方向を指すベクトルは、すべて異なる角度/方向を持っていることを忘れないでください。

同じ画像ポイントを多かれ少なかれ指すすべてのベクトルをグループ化することをお勧めします。

于 2012-06-07T09:48:43.457 に答える