OpenCV-为什么光流仅在调整视频大小时有效?

问题描述 投票:3回答:1

我正在尝试在某些视频上使用光学流。但是当我不调整视频大小时,它根本不起作用。

根据documentation,我已将参数设置为:

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

如果视频按比例缩小或放大,则效果很好:

enter image description hereenter image description here

但是如果保留视频的原始大小,则根本不起作用:

enter image description hereenter 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);
...

但是它们都没有任何区别。原始尺寸视频的结果仍然没有通过。

Lukas Kanade algorithm具有完全相同的问题:

enter image description hereenter image description here

[当我将720 x 480或其他高分辨率视频缩小到一半大小(360 x 240)时,光流算法仍然可以正常工作。但是,无论我如何设置参数,如果没有缩放比例(原始尺寸),它们对于视频都是不起作用的。

如何在不调整视频大小的情况下使Optical Flow适用于视频?

c++ opencv opticalflow
1个回答
0
投票

问题出在currentprev指向同一帧。

通过在帧队列中使用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);
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.