Проблема
Ранее у меня был какой-то код, который выглядел так:
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
.
Фон
Первый и тот, который соответствует файлу, уже включенному из старой версии кода, находится здесь и имеет две функции, которые соответствуютитерации, setInnerIterations()
и setOuterIterations()
.
Второй найден полностью в другом пути к файлу, найден здесь и имеет только один метод для установки итераций, setIterations()
Я не знаю, как перевести этот метод на новую версию.версия отслеживания класса имеет документацию, но ничего не упоминает о внутренних и внешних итерациях в описании параметра алгоритма здесь :
- member int итераций Используется число итераций критерия остановкив числовой схеме.
И, повторюсь, в этом классе нет члена, соответствующего следующему описанию, определение setInnerIterations()
:
Внутренние итерации (между фильтрацией выбросов), используемые в числовой схеме.
и описание setOuterIterations()
:
Используются внешние итерации (количество внутренних циклов)в числовой схеме.
кажется, что ни один из них не совпадает с одним членом «итераций критерия остановки, используемых в числовой схеме».
Я подумал, может быть, другой *Класс 1063 * помог бы, но документация по все члены пуста и нет описания параметров алгоритма .
У меня естьв журналах обновлений OpenCV пытался выяснить, что именно изменилось, чтобы увидеть, как я должен обновить эту функцию, но я не смог ее найти.Я также не уверен, как найти коммит, который добавил это изменение в репозитории OpenCV.
Вопрос
Какой из этих методов я должен использовать для замены set("iterations", iterations)
в cv::DualTVL1OpticalFlow
, setInnerIterations()
или setOuterIterations()
?или класс изменился на класс в cv::superres
?