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

您必须调用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 回答