c – 如何在失去目标时重置或更新KCF跟踪器ROI
发布时间:2020-12-16 06:52:47 所属栏目:百科 来源:网络整理
导读:我正在使用KCF跟踪算法,我的问题是当目标从窗口退出时,跟踪器不会重置并错误地在窗口边缘显示它的矩形.理想状态跟踪器应该在失去目标时删除矩形. 这些是我的代码: int main(int argc,char** argv) { Rect2d roi; Mat frame; // create a tracker object Ptr
我正在使用KCF跟踪算法,我的问题是当目标从窗口退出时,跟踪器不会重置并错误地在窗口边缘显示它的矩形.理想状态跟踪器应该在失去目标时删除矩形.
这些是我的代码: int main(int argc,char** argv) { Rect2d roi; Mat frame; // create a tracker object Ptr<Tracker> tracker = Tracker::create("KCF"); VideoCapture cap("C2_0002.mp4"); cap >> frame; resize(frame,frame,Size(frame.cols / 2,frame.rows / 2)); roi = selectROI("tracker",frame); //quit if ROI was not selected if (roi.width == 0 || roi.height == 0) return 0; // initialize the tracker tracker->init(frame,roi); // perform the tracking process printf("Start the tracking process,press ESC to quit.n"); for (;; ) { // get frame from the video cap >> frame; resize(frame,frame.rows / 2)); // stop the program if no more images if (frame.rows == 0 || frame.cols == 0) break; // update the tracking result tracker->update(frame,roi); rectangle(frame,roi,Scalar(255,0),2,1); imshow("tracker",frame); if (waitKey(1) == 27)break; } } 您还可以看到我的模拟的简短视频,并查看问题: 解决方法
你能指点一点吗?
a)您要删除整个跟踪器 b)如果跟踪器上没有更新,您只是不想打印矩形 如果对象返回(在同一位置或旧出口位置旁边的另一个位置返回),我不确定跟踪器是否会再次工作,但我认为最简单的显示解决方案是: 创建一个变量来计算跟踪器的步数 – > update(frame,roi)返回false,如果tracker-> update(frame,roi)返回true,则将其设置为0.超过一定数量(阈值)的矩形(frame,1)不应该被调用,或者你可以删除跟踪器/打破循环(就像我之前所说的,我不确定是否它会再次运作,另外跟踪器使用主动学习 – 它每走一步都会学习:错误的训练样本会导致错误的行为) fyi->原始论文:http://www.robots.ox.ac.uk/~joao/publications/henriques_eccv2012.pdf) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |