initialization - 重新初始化后 OpenCV 3 Tracker 将无法工作

标签 initialization tracking opencv3.0

我在使用 OpenCV 3 跟踪模块进行跟踪时遇到问题。它的行为相同,我使用接口(interface)类(cv::Tracker)或具有实现的类(如 cv::TrackerMedianFlow 或 cv::TrackerMIL 等)。示例是来自 OpenCV 示例文件夹的一些修改示例
正确创建后

Ptr<Tracker> tracker = Tracker::create( tracker_algorithm );
if ( tracker == NULL )
{
    std::cout << "***Error in the instantiation of the tracker...***\n";
    return -1;
}

初始化工作得很好
if ( !tracker->init( frame, boundingBox ) )
{
    std::cout << "***Could not initialize tracker...***\n";
    return -1;
}

当跟踪丢失时,问题出现在主循环的后期。我使用单独的检测器来定义新目标。当我找到新目标时,我清除跟踪器并用新值初始化它
                    tracker->clear( );
                    if ( !tracker->init( frame, detectedNewBBox) )
                    {
                        std::cout << "***Could not initialize tracker without history...***\n";
                        return -1;
                    }

但是,初始化总是返回 false。我试图找出为什么无法初始化跟踪器?
数据检查了几次,看起来很正确。我什至进行了小型实验,尝试在创建后立即使用相同的数据初始化跟踪器,它不会初始化循环并且它工作得很好。
难道我做错了什么?我无法找到有关此的任何文档...
以下是可用文档的链接:
OpenCV 3 Tracker documentation

感谢您的任何努力!

最佳答案

如果您想跟踪新的 ROI(感兴趣区域),那么我建议您应该创建一个新的跟踪器,而不是清除并尝试重用以前的跟踪器。当您需要调用 init 时重复使用不会提供额外的好处。正如您所观察到的,默认情况下不允许重新初始化跟踪器。

但是,如果您想通过更正恢复对同一对象的跟踪,则可以通过执行以下步骤(我自己还没有尝试过。以下代码是 只是一个伪代码 )

Ptr<TrackerModel> model = tracker->getModel();
Ptr<TrackerTargetState> lastTargetstate = getLastTargetState();

// Make changes to lastTargetState (update position etc)

// Set lastTargetState, I am not sure if you need to actually set it
// or just editing the object through pointer should work.
model->setLastTargetState(lastTargetstate);

关于initialization - 重新初始化后 OpenCV 3 Tracker 将无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31432815/

相关文章:

ios - 寻址 init 中闭包内创建的实例

c++ - 使用常量长度时 char[] 和 new char[] 之间的区别

object - 用opencv跟踪矩形

python - OpenCV:对于相同的输入参数,SolvePnP给出不同的结果

c++ - opencv:检查两个 iplimages 在 c/c++ 中是否相等?

JavaScript 检查变量是否存在(已定义/初始化)

swift - 如何在协议(protocol)扩展中定义初始值设定项?

url - 使用 Google Analytics 跟踪 URL 更改而无需重新加载页面

exception - BizTalk 从 "Exception thrown from: segment X progress Y"开始通信的分段和进度是什么意思

Python:如何使用opencv选择边框之间的图像部分