OpenCV - почему Optical Flow не работает с dequeue <Mat>? - PullRequest
3 голосов
/ 06 марта 2020

Я пытаюсь использовать оптический поток в некоторых видео. Но это не работает вообще, когда я не изменяю размер видео.

Согласно документации я установил параметры как:

calcOpticalFlowFarneback(prevgray, current, flow, 0.5, 1, 10, 2, 5, 1.1, 0);

In В случае уменьшенного или уменьшенного видео оно работает нормально:

enter image description here enter image description here

Но в случае сохранения Исходный размер видео это не работает вообще:

enter image description here enter image description here

Я попытался изменить параметры функция:

calcOpticalFlowFarneback(prevgray, current, flow, 0.5, 1, 4, 2, 3, 1.1, 0);
//or
calcOpticalFlowFarneback(prevgray, current, flow, 0.5, 1, 50, 2, 5, 1.2, 0);
//or
calcOpticalFlowFarneback(prevgray, current, flow, 0.5, 1, 100, 20, 7, 1.2, 0);
...

Но ни один из них не имеет никакого значения. Результат для видео оригинального размера все еще отсутствует.

Алгоритм Лукаса Канаде имеет точно такую ​​же проблему:

enter image description here enter image description here

Когда я уменьшаю 720 x 480 или другие видеоролики с высоким разрешением до половины (360 x 240), алгоритмы оптического потока все еще работают хорошо. Но они не работают вообще для видео без масштабирования (оригинальный размер), независимо от того, как я устанавливаю параметры.

Как настроить оптический поток для работы с видео без изменения его размера?

1 Ответ

0 голосов
/ 10 марта 2020

Согласно этой записи , проблема была в том, что current и prev указывают на один и тот же кадр.

Это было исправлено с помощью frame.clone() вместо frame в очереди кадров.

deque<Mat> frames;
...
frames.push_back(frame.clone());
...
current = frame;
prev = frames[frames.size() - 5];
...
calcOpticalFlowFarneback(prevgray, current, flow, 0.5, 1, 10, 2, 5, 1.1, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...