我正在尝试使用opencv中的multritracker算法,但是正如我提到的,我无法添加多个跟踪器。我仅在杂色为空(第一次调用)时才碰到这部分代码,并在最后将其删除(选中)。
if (bboxes.empty()) {
bboxes.resize(number_of_rois);
for (int i = 0; i < number_of_rois; i++) {
// Bounding Boxes
bboxes[i].x = int(res[i].xLeft);
bboxes[i].y = int(res[i].yTop);
bboxes[i].width = int(res[i].xRight - res[i].xLeft);
bboxes[i].height = int(res[i].yBottom - res[i].yTop);
// Create multitracker
if (multiTracker.empty()) {
multiTracker = cv::MultiTracker::create();
}
error = multiTracker->add(tracker, frame, Rect2d(bboxes[i]));
}
}
也尝试了第二种可能的功能,但结果相同:
bool add (std::vector< Ptr< Tracker > > newTrackers, InputArray image, std::vector< Rect2d > boundingBox)
之后,我尝试将边界框从dll返回到我的程序那时的调试为我显示了每个对象相同的结果,尽管我的投资回报率不同。
// Bounding Rects
res[i].xLeft = float(multiTracker->getObjects()[i].x);
res[i].xRight = float(multiTracker->getObjects()[i].x + multiTracker->getObjects()[i].width);
res[i].yTop = float(multiTracker->getObjects()[i].y);
res[i].yBottom = float(multiTracker->getObjects()[i].y + multiTracker->getObjects()[i].height);
我很高兴在这里提出您的一些想法。
OpenCV:4.0.1
我很抱歉,我使用相同的“ tracker”指针添加了第二个跟踪器。
解决方案:
总是创建一个新的跟踪器,如下所示:
Ptr<Tracker> createTrackerByName(int method) {
Ptr<Tracker> tracker;
switch (method) {
case 0: tracker = TrackerBoosting::create(); break;
case 1: tracker = TrackerMIL::create(); break;
case 2: tracker = TrackerKCF::create(); break;
case 3: tracker = TrackerTLD::create(); break;
case 4: tracker = TrackerMedianFlow::create(); break;
case 5: tracker = TrackerGOTURN::create(); break;
case 6: tracker = TrackerMOSSE::create(); break;
case 7: tracker = TrackerCSRT::create(); break;
default:
//errors here
break;
}
return tracker;
}