2

参照、OpenCv\samples\c\lkdemo.c

次のコード スニペットの機能を知っている人はいますか?

lkdemo.c から抽出されたコード

 for( i = k = 0; i < count; i++ )
            {
                if( add_remove_pt )
                {
                    double dx = pt.x - points[1][i].x;
                    double dy = pt.y - points[1][i].y;

                    if( dx*dx + dy*dy <= 25 )
                    {
                        add_remove_pt = 0;
                        continue;
                    }
                }

                if( !status[i] )
                    continue;

                points[1][k++] = points[1][i];
                cvCircle( image, cvPointFrom32f(points[1][i]), 3, CV_RGB(0,255,0), -1, 8,0);
            }
            count = k;

Q1.

太線は何をしますか? >> ポイント[1][k++] = ポイント[1][i];

なぜ k++ なのか? 次のポイントが現在のポイントによって上書きされると考えて混乱しています

Q2.

フレーム ループとして描画される cvCircle id として、古いポイントがクリアされ、新しいポイントが描画される場所はどこですか?

皆様のご意見をお待ちしております。

ありがとう =)

4

5 に答える 5

3

Q1:

コードをリファクタリングすると、おそらく役立つでしょう。

if( status[i] ) {
    points[1][k++] = points[1][i];  // <---- Q1
    cvCircle( image, cvPointFrom32f(points[1][i]), 3, CV_RGB(0,255,0), -1, 8,0);
}

したがって、質問 1 の行では、i は常にインクリメントされます (ループによってインクリメントされます) が、k は status[i] が true の場合にのみインクリメントされます。つまり、status[i] が false である配列内のポイントをコピーして削除し、配列の長さ (カウント) を削除に合格した数 k に設定します。

于 2008-12-04T04:10:16.410 に答える
1

5 ピクセル (5*5=25) を超えてドリフトしたポイントを削除しています。k は、ポイントが削除されたときに出力インデックスを追跡するために使用されています。

于 2008-12-04T04:11:23.430 に答える
0

私がそれを得るかどうか見てみましょう。このブロック コードは、status[i] が false であるポイント、つまり、前のイメージにあり、現在のイメージには見つからなかったポイントを排除します。しかし、これを行うと、追跡でこれらのポイントが失われますよね? つまり、N px のオブジェクトを追跡している場合、すべての反復でポイントが削除されます。それは良いアプローチですか?なぜこれを行うのですか?

于 2013-11-19T17:51:45.077 に答える
0

かなり時代遅れですが、プロトコルのために-

現在、iPhone 用のオープンソースの Lucas Kanade アプリがあります - http://www.success-ware.com/150842/Lucas-Kanade-Detection-for-the-iPhone

lkdemo コードも使用し、その周りにいくつかのエクストラを追加します。

上記のリンクには、AppStore のアプリとプロジェクトのソース コードの両方へのリンクがあります。

HTH 誰でも、乾杯、

オデド

于 2011-04-09T20:43:05.700 に答える
0

ポイントのクリアがどこで行われたかを把握することができました。フレームがループすると、新しいポイントが新しいフレームに反映され、新しいフレームが前のフレームを更新します。

于 2008-12-04T05:51:52.587 に答える