在OpenCV 3.0以上版本中,该函数用于替换cv :: DualTVL1OpticalFlow

时间:2019-01-30 15:23:34

标签: c++ opencv image-processing opencv3.0 opticalflow

问题

以前,我有一些看起来像这样的代码:

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::DualTVL1OpticalFlowsetInnerIterations()中的setOuterIterations()?还是班级更改为cv::superres中的班级?

0 个答案:

没有答案