以前,我有一些看起来像这样的代码:
std::unique_ptr<cv::Ptr<cv::DenseOpticalFlow()>> x;
//...
x.reset(new cv::Ptr<cv::DenseOpticalFlow>());
*x = cv::createOptFlow_DualTVL1();
(*x)->set("iterations", 100);
但是该代码来自OpenCV 2.4.xx,并且不再在OpenCV 3.0+中编译。为了解决这个问题,我寻找了如何在新API中完成此操作。
我将上面的代码更改为:
std::unique_ptr<cv::Ptr<cv::DualTVL1OpticalFlow()>> x;
//...
x.reset(nullptr);
*x = cv::createOptFlow_DualTVL1();
(*x)->setIterations(100); //fails to compile this line
只是发现我的新示例由于没有setIterations
函数而无法编译。我意识到该代码使用的DualTVL1OpticalFlow
位于<opencv2/video/tracking.hpp>
内部,实际上有两个DualTVL1OpticalFlow
,一个在跟踪中,一个在superres
中。
第一个和与旧版本代码中已包含的文件相对应的是found here,并具有两个与迭代相对应的函数setInnerIterations()
和setOuterIterations()
。
第二个完全位于不同文件路径中的文件是here,只有一种设置迭代的方法,setIterations()
我不知道如何将此方法转换为新版本。该类的跟踪版本有文档,但在algorithm parameter description here中没有提及内部和外部迭代:
- 成员int迭代数值方案中使用的停止标准迭代次数。
再重复一次,此类中没有与以下描述对应的成员,setInnerIterations()
的定义是:
数值方案中使用的内部迭代(异常值过滤之间)。
,setOuterIterations()
的描述为:
数值方案中使用的外部迭代(内部循环数)。
这两个似乎都不与“数值方案中使用的停止标准迭代”的单个成员一致。
我认为其他cv::superres::DualTVL1OpticalFlow
类可能会有所帮助,但是那里的文档all members is empty and there is no algorithm parameter description上。
我查看了OpenCV更新日志,试图找出到底发生了什么变化,以了解应该如何更新此功能,但是我似乎找不到它。我也不确定如何找到在OpenCV存储库中添加了此更改的提交。
我应该使用其中一种方法替换set("iterations", iterations)
,cv::DualTVL1OpticalFlow
或setInnerIterations()
中的setOuterIterations()
?还是班级更改为cv::superres
中的班级?