cv2.calcOpticalFlowFarneback()函数是opencv中使用Gunnar Farneback算法计算稠密光流(每个像素的光流都要计算)的pyhton实现。相关论文为
《Two-Frame Motion Estimation Based on PolynomialExpansion》
,Gunnar Farneback算法基于图像梯度恒定假设和局部光流恒定假设。
调用格式:
flow = cv2.calcOpticalFlowFarneback(prevImg, nextImg, pyr_scale, levels, winsize, iterations, poly_n, poly_sigma, flags[, flow])
参数解析:
prevImg: 前一帧8-bit单通道图像
nextImg: 当前帧图像,与前一帧保持同样的格式、尺寸
pyr_scale: 金字塔上下两层之间的尺度关系,该参数一般设置为pyrScale=0.5,表示图像金字塔上一层是下一层的2倍降采样
levels:图像金字塔的层数
winsize:均值窗口大小,winsize越大,算法对图像噪声越鲁棒,并且能提升对快速运动目标的检测效果,但也会引起运动区域模糊。
iterations:算法在图像金字塔每层的迭代次数
poly_n:用于在每个像素点处计算多项式展开的相邻像素点的个数。poly_n越大,图像的近似逼近越光滑,算法鲁棒性更好,也会带来更多的运动区域模糊。通常,poly_n=5 or 7
poly_sigma:标准差,poly_n=5时,poly_sigma = 1.1;poly_n=7时,poly_sigma = 1.5