Python OpenCV 中 calcOpticalFlowFarneback 函数的输出值范围

Range of output values in calcOpticalFlowFarneback function in Python OpenCV

我正在使用

计算视频的光流
flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 3, 15, 3, 5, 1.2, 0)

输入分辨率为 320x240。我用这段代码计算了从函数接收到的流数据的一些基本统计数据

arr1 = np.load(file_path)
y = arr1[:,:,0]
x = arr1[:,:,1]

if (y_min > y.min()):
    y_min = y.min()

if (y_max < y.max()):
    y_max = y.max()

我得到了以下值:

y:

    min                max                mean                std_dev
-838.59191895        850.21942139        0.01124349        4.41635523



x:

    min                max                mean                std_dev
-58.26990128        73.48989105        0.00110086        2.47226620

我注意到 y 坐标的最小值和最大值远远超过输入维度,即 320x240。任何人都可以指出这种观察的原因吗?我无法计算出 cv2.calcOpticalFlowFarneback 函数期望值的有效范围。

理论上,光流估计中没有最小和最大界限,因为没有像块匹配方法那样的搜索范围。运动矢量源自图像梯度和光流方程,可以指向图像或视频边界之外。高误差可能是流量估计的粗略异常值,这完全正常,如果图像中的内容由于光照变化、阴影、运动模糊、编码伪影等而发生显着变化,则可能会导致这种情况。