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

时间:2019-04-17 06:59:55

标签: python opencv opencv-python

我正在使用来计算视频的光通量

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函数期望的有效值范围。

1 个答案:

答案 0 :(得分:1)

理论上,由于没有像块匹配方法那样的搜索范围,光流估计中没有最小和最大界限。运动矢量是从图像梯度和光流方程得出的,并且可以指向图像或视频范围之外。高误差可能是流量估计的总体异常值,总体上是正常的,并且可能是由于光照变化,阴影,运动模糊,编码伪像等导致图像内容急剧变化而引起的。