我在一个代码中工作,我必须找到我感兴趣的所有角点的轨迹。因此,为了同样的目的,我使用了LKPyr光流,它使用前一张图像的角点并在当前图像中找到它们。我一帧一帧地使用光流,即帧1和帧2,然后是帧2和帧3。所以,我认为我在上一次迭代中找到的帧2角点特征将是光流的当前特征,但事实并非如此,每次我做好特征跟踪时,点都会改变,问题是,对于轨迹点,我需要跟踪当前点,并在新点到来时添加新点,当旧点即将丢失时,我应该获得status=0,这样我就可以逐个跟踪点。有没有办法做到这一点?有没有办法知道视频中每个点的结束时间,以便我可以跟踪轨迹?更改cvLKpyrOpticalFlow调用中的标志是否有助于获得连续的流?
cvGoodFeaturesToTrack ( imgGrayscale, imgEigen, imgTemp, corners_img, &corner_count, 0.01, 5.0, 0, 3, 0.4 );
cvCalcOpticalFlowPyrLK( imgGrayscale, nxtimgGrayscale, pyr_img, pyr_nxtimg, corners_img, corners_nxtimg, corner_count, cvSize ( win_size, win_size ), 5, status, track_error, IterCriteria, NULL);这是我为了得到光流而运行的代码块。
发布于 2012-06-07 20:19:39
您应该仅在要跟踪的序列的“第一个”(或“参考”)帧中运行cvGoodFeturesToTrack,然后仅在后续帧中运行cvCalcOpticalFlowPyrLK。
前面的例程在参考帧中识别具有“高对比度”(在表达式的明确定义意义上)的像素和补丁,因此可能更容易跟踪。后一个例程实际上执行跟踪,将参考特征与后续帧中的附近位置进行匹配,以便识别它们的新位置。当它成功时,它将状态向量中的相应元素设置为1。对于帧本身来说,后续帧中的这些特征可能是也可能不是“好的跟踪特征”,因为可能存在具有更高对比度的其他图像区域。无论如何,对于大多数应用程序,您只需要跟踪在参考帧中检测到的“良好特征”。
由于跟踪某些功能通常会失败,在几帧之后,您可能会发现没有(或不够多)“活动的”-tracked功能。在这一点上,您可以运行另一次“良好功能”检测来补充集合。
https://stackoverflow.com/questions/10927539
复制相似问题