私はOpenCVのPyramid Lukas Kanade関数を使ってオプティカルフローを推定しています。私はcvGoodFeaturesToTrack
を呼び出し、次にcvCalcOpticalFlowPyrLK
を呼び出します。これは私のコードです:opencvを使ったオプティカルフロー
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の初期値ですが、再びゆっくりと減少します。私はopenCVを使って過去4ヶ月間オープンしています。openCVへの新しいllです。ガイドを私に教えてください。
@ sgar91 ... thanx ...あなたの提案でパフォーマンスが改善しました –
私はずっと前に同じ問題を経験しました。 – sgarizvi
@rotating_imageこの回答が受け入れられたとチェックされた理由はわかりません。機能の数をリセットすると、 'cvCalcOpticalFlowPyrLK'をまったく呼び出すことは意味がありません。それはあなたがそれを呼び出さないと同じ結果を与えるでしょう...まずはドキュメントを読む。 – ArtemStorozhuk