5

オプティカル フローの推定には、OpenCV の Pyramid Lukas Kanade 関数を使用しています。私はcvGoodFeaturesToTrackと を呼び出しますcvCalcOpticalFlowPyrLK。これは私のコードです:

while(1)
{
...

cvGoodFeaturesToTrack(frameAth,eig_image,tmp_image,cornersA,&corner_count,0.01,5,NULL,3,0.4);

std::cout<<"CORNER COUNT AFTER GOOD FEATURES2TRACK CALL = "<<corner_count<<std::endl;

cvCalcOpticalFlowPyrLK(frameAth,frameBth,pyrA,pyrB,cornersA,cornersB,corner_count,cvSize(win_size,win_size),5,features_found,features_errors,cvTermCriteria( CV_TERMCRIT_ITER| CV_TERMCRIT_EPS,20,0.3 ),CV_LKFLOW_PYR_A_READY|CV_LKFLOW_PYR_B_READY);

cvCopy(frameBth,frameAth,0);
...
}

frameAthは前の灰色のフレームで、frameBthウェブカメラからの現在の灰色のフレームです。しかし、各フレームで追跡するために良い機能の数を出力すると、その数は合計時間後に減少し、減少し続けます。しかし、プログラムを終了してコードを再度実行すると (ウェブカメラの視野を妨げずに)、追跡するのに適した機能として、より多くのポイントが表示されます...どうすれば同じ視野と同じ視野を得ることができますか?シーン関数はポイント数にそのような違いを与えます...そしてその差は大きいです..例えば、4分間の実行後に追跡するのに適した機能としてのポイント数は20または50です...しかし、同じプログラムが終了し、もう一度実行すると、最初は500から700ですが、ゆっくりと減少します..私は過去4か月間opencvを使用しているので、openCVを初めて使用します..私を案内するか、解決策を見つけることができる場所を教えてください...たくさん事前に感謝..

4

2 に答える 2

6

追跡するのに適した機能を検出するには、(最初に、ループの前に) 1 回呼び出してcvGoodFeaturesToTrackから、 を使用してこれらの機能を追跡する必要がありますcvCalcOpticalFlowPyrLK。デフォルトの opencv の例を見てみましょう: OpenCV/samples/cpp/lkdemo.cpp.

于 2012-06-19T15:21:30.687 に答える
1

あなたは参照によって呼び出しcvGoodFeatureToTrackて渡しcorner_countています。見つかった特徴が少ない場合、その値は減少します。while ループの各反復でcorner_count呼び出す前に、の値を初期値にリセットする必要があります。cvGoodFeaturesToTrack

于 2012-06-20T09:17:58.260 に答える