我正在尝试在某些视频上使用光学流。但是当我不调整视频大小时,它根本不起作用。
根据documentation,我已将参数设置为:
calcOpticalFlowFarneback(prevgray, current, flow, 0.5, 1, 10, 2, 5, 1.1, 0);
如果视频按比例缩小或放大,则效果很好:
但是如果保留视频的原始大小,则根本不起作用:
我已经尝试过更改函数的参数:
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具有完全相同的问题:
[当我将720 x 480
或其他高分辨率视频缩小到一半大小(360 x 240
)时,光流算法仍然可以正常工作。但是,无论我如何设置参数,如果没有缩放比例(原始尺寸),它们对于视频都是不起作用的。
如何在不调整视频大小的情况下使Optical Flow适用于视频?
问题出在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);