使用opencv的光流

时间:2012-06-19 15:07:30

标签: c++ image-processing opencv

我正在使用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 ..请指导我或告诉我在哪里可以找到解决方案...很多提前谢谢..

2 个答案:

答案 0 :(得分:6)

您必须拨打cvGoodFeaturesToTrack一次(在开始之前,在循环之前)以检测要跟踪的好功能,并使用cvCalcOpticalFlowPyrLK跟踪这些功能。看一下默认的opencv示例:OpenCV/samples/cpp/lkdemo.cpp

答案 1 :(得分:1)

您正在呼叫cvGoodFeatureToTrack并通过引用传递corner_count。如果找到较少的特征,其值会降低。在每次迭代循环中调用corner_count之前,必须将cvGoodFeaturesToTrack的值重置为其初始值。