使用opencv的光流

rot*_*age 5 c++ opencv image-processing

我正在使用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);
...
}
Run Code Online (Sandbox Code Playgroud)

frameAth是以前的灰色框架,frameBth是网络摄像头的当前灰色框架.但是当我在每帧中输出要跟踪的好特征的数量时,该数量在总和时间之后减少并且持续减少.但如果我终止程序并再次执行代码(不干扰网络摄像头的视野),则会显示更多数量的点作为跟踪的良好特征...如何对于相同的视野和相同的视野场景中的功能给在点的数目这样的区别...和差分high..eg..number一样好特征以跟踪4分钟后执行的是20或50 ...但是,当同一个程序终止,并且再次执行该数字是500至700初始但又慢慢减少..我在过去4个月使用opencv所以我是新的openCV ..请指导我或告诉我在哪里可以找到解决方案...很多提前..

Art*_*huk 6

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


sga*_*zvi 1

您正在通过引用进行调用cvGoodFeatureToTrack和传递corner_count。如果发现的特征较少,其价值就会降低。在调用while 循环的每次迭代之前,您必须将 的值重置corner_count为其初始值。cvGoodFeaturesToTrack