OpenCV - 为什么光流不适用于 dequeue<Mat>?
OpenCV - why Optical Flow does not work with dequeue<Mat>?
我正在尝试在某些视频上使用光流。但是当我不调整视频大小时它根本不起作用。
根据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);
...
但是其中 none 有什么不同。结果原尺寸视频还是没有流量
Lukas Kanade algorithm 有完全相同的问题:
当我将 720 x 480
或其他高分辨率视频缩小到一半大小 (360 x 240
) 时,光流算法仍然运行良好。但无论我如何设置参数,它们都不适用于没有缩放(原始大小)的视频。
如何在不调整视频大小的情况下使光流适用于视频?
根据this post,
问题是 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);
我正在尝试在某些视频上使用光流。但是当我不调整视频大小时它根本不起作用。
根据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);
...
但是其中 none 有什么不同。结果原尺寸视频还是没有流量
Lukas Kanade algorithm 有完全相同的问题:
当我将 720 x 480
或其他高分辨率视频缩小到一半大小 (360 x 240
) 时,光流算法仍然运行良好。但无论我如何设置参数,它们都不适用于没有缩放(原始大小)的视频。
如何在不调整视频大小的情况下使光流适用于视频?
根据this post,
问题是 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);