重新初始化后,OpenCV 3 Tracker将无法运行

Nik*_*ola 7 tracking initialization opencv3.0

我有问题使用OpenCV 3跟踪模块进行跟踪.它的行为相同,我使用接口类(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;
}
Run Code Online (Sandbox Code Playgroud)

初始化工作正常

if ( !tracker->init( frame, boundingBox ) )
{
    std::cout << "***Could not initialize tracker...***\n";
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

当跟踪丢失时,问题发生在主循环的后期.我使用单独的探测器来定义新目标.当我找到新目标时,我清除跟踪器并使用新值初始化它

                    tracker->clear( );
                    if ( !tracker->init( frame, detectedNewBBox) )
                    {
                        std::cout << "***Could not initialize tracker without history...***\n";
                        return -1;
                    }
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的努力!

Tho*_*hom 3

我刚刚遇到了同样的问题,这是我如何让它工作的:

tracker->clear();

Ptr<Tracker> trackerNew = Tracker::create( tracker_algorithm );

tracker = trackerNew;
tracker->init( image, boundingBox );
Run Code Online (Sandbox Code Playgroud)

可能不是正确的方式或最漂亮的方式,但它确实有效:)