gpt4 book ai didi

c++ - 丢失目标时如何重置或更新 KCF 跟踪器 ROI

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:21:35 27 4
gpt4 key购买 nike

我正在使用 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, Size(frame.cols / 2, 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, 0), 2, 1);

imshow("tracker", frame);
if (waitKey(1) == 27)break;
}
}

您还可以观看我的模拟短视频并查看问题所在: http://www.0up.ir/do.php?downf=4_e2aa9.mp4

最佳答案

你能再具体一点吗?
a) 你想删除整个跟踪器
b) 如果跟踪器没有更新,你只是不想打印矩形

我不确定如果对象返回(在相同位置返回或在旧退出位置旁边的另一个位置返回)跟踪器是否会再次工作,但我认为最简单的显示解决方案是:

创建一个变量来计算 tracker->update(frame, roi) 返回 false 的步数,如果 tracker->update( frame, roi) 返回 true。超过某个数字(阈值)时,不应调用 rectangle(frame, roi, Scalar(255, 0, 0), 2, 1) 或者您可以删除跟踪器/打破循环(就像我之前说过我不确定它是否会再次工作,另外跟踪器使用主动学习 - 它在每一步中学习:错误的训练样本会导致错误的行为)

fyi->原论文:http://www.robots.ox.ac.uk/~joao/publications/henriques_eccv2012.pdf )

关于c++ - 丢失目标时如何重置或更新 KCF 跟踪器 ROI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40443416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com