C++ OpenCV-为什么光流不能与出列一起工作<;Mat>;?

C++ OpenCV-为什么光流不能与出列一起工作<;Mat>;?,c++,opencv,opticalflow,C++,Opencv,Opticalflow,我尝试在一些视频中使用光流。但当我不调整视频大小时,它根本不起作用 根据本标准,我已将参数设置为: 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); //或

我尝试在一些视频中使用光流。但当我不调整视频大小时,它根本不起作用

根据本标准,我已将参数设置为:

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);
//或
calcOpticalFlowFarneback(prevgray,电流,流量,0.5,1,50,2,5,1.2,0);
//或
calcOpticalFlowFarneback(prevgray,current,flow,0.5,1100,20,7,1.2,0);
...
但它们都没有任何区别。原始大小的视频仍然没有流量

问题完全相同:

当我将
720x480
或其他高分辨率视频缩小到一半大小(
360x240
)时,光流算法仍然工作良好。但是,无论我如何设置参数,在没有缩放(原始大小)的情况下,它们根本不适用于视频

如何使光流在不调整视频大小的情况下为视频工作?

根据, 问题在于
current
prev
指向同一帧

它是通过在帧队列中使用
frame.clone()
而不是
frame
修复的

deque帧;
...
frames.push_back(frame.clone());
...
当前=帧;
prev=帧[frames.size()-5];
...
calcOpticalFlowFarneback(prevgray,current,flow,0.5,1,10,2,5,1.1,0);

您是否尝试过CalCopticalFlowPyrk?我建议您查看OpenCV 4.2.0的文档:您能在处理之前调整工作视频帧的大小(320240)吗?因为我试过这些尺寸,效果很好。@YunusTemurlenk你说得对。我将它们缩小到一半大小,仍然可以工作。似乎如果视频的原始大小很大,它就可以工作,否则就不行了。@Ali我试过
calcOpticalFlowPyrLK
。但它也有同样的问题。适用于更高分辨率的视频,但不适用于更小的视频!那真有趣。。。