(8条消息) 目标跟踪-视频分析-CSDNOpenCV技能树
问题描述
学习目标跟踪的时候把代码粘过来发现以下代码出现bug:
cv::Ptr<cv::Tracker> createTrackerByName(EnumTrackerType eTrackerType) {
switch (eTrackerType) {
case ENUM_TRACKER_TYPE(BOOSTING): return cv::TrackerBoosting::create();
case ENUM_TRACKER_TYPE(MIL): return cv::TrackerMIL::create();
case ENUM_TRACKER_TYPE(KCF): return cv::TrackerKCF::create();
case ENUM_TRACKER_TYPE(TLD): return cv::TrackerTLD::create();
case ENUM_TRACKER_TYPE(MEDIANFLOW): return cv::TrackerMedianFlow::create();
case ENUM_TRACKER_TYPE(GOTURN): return cv::TrackerGOTURN::create();
case ENUM_TRACKER_TYPE(MOSSE): return cv::TrackerMOSSE::create();
case ENUM_TRACKER_TYPE(CSRT): return cv::TrackerCSRT::create();
default:
std::cout << "Incorrect tracker index : " << eTrackerType << std::endl;
for (int i = 0, len = trackerTypes.size(); i < len; ++i) {
printf(" [ %d ] %s\n", i, trackerTypes[i].c_str());
}
break;
}
cv::Ptr<cv::Tracker> tracker;
return tracker;
}
弹出错误 E0276 后面有“::”的名称一定是类名或命名空间名,问题出在TrackerBoosting、TrackerTLD、TrackerMedianFlow、TrackerMOSSE几个类上。
解决方案
搜了半天没有找到解决方法,然后在opencv官方文档里搜了一下发现了问题:高版本的OpenCV (我用的是4.6.0)把上面这几个类放在了tracking_legacy.hpp中,代码要做相应修改:
添加头文件:
#include <opencv2/tracking/tracking_legacy.hpp>
在相应类名前添加legacy:: :
case ENUM_TRACKER_TYPE(BOOSTING): return cv::legacy::TrackerBoosting::create();
case ENUM_TRACKER_TYPE(MIL): return cv::TrackerMIL::create();
case ENUM_TRACKER_TYPE(KCF): return cv::TrackerKCF::create();
case ENUM_TRACKER_TYPE(TLD): return cv::legacy::TrackerTLD::create();
case ENUM_TRACKER_TYPE(MEDIANFLOW): return cv::legacy::TrackerMedianFlow::create();
case ENUM_TRACKER_TYPE(GOTURN): return cv::TrackerGOTURN::create();
case ENUM_TRACKER_TYPE(MOSSE): return cv::legacy::TrackerMOSSE::create();
case ENUM_TRACKER_TYPE(CSRT): return cv::TrackerCSRT::create();
问题解决。