稀疏光流和稠密光流,OpenCV实现

本文介绍了光流的基本概念,包括稀疏光流的Lucas-Kanade法和稠密光流的Gunnar-Farneback算法。在OpenCV中,利用cv2.goodFeaturesToTrack()寻找角点,cv2.calcOpticalFlowPyrLK()计算稀疏光流,以及cv2.calcOpticalFlowFarneback()计算稠密光流。通过实例展示了如何使用这些函数来处理视频中的光流问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 参考:光流Optical Flow介绍与OpenCV实现_zouxy09的专栏-优快云博客_opencv 光流

# 参考:光流(Optical Flow)算法原理及示例

# 参考:机器学习进阶-光流估计 1.cv2.goodFeaturesToTrack(找出光流估计所需要的角点) 2.cv2.calcOpticalFlowPyrLK(获得光流检测后的角点位置) 3.cv2.add(进行像素点的加和) - python我的最爱 - 博客园

# 参考:Gunnar-Farneback算法原理 & Farneback光流法在UCSD异常数据集上的Demo_Carson1145的博客-优快云博客

基本概念

光流是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素时间域上的变化以及相邻帧之间的相关性来找到上一帧和当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。

光流是场景中的前景目标的本身移动、相机的运动,或两者的共同运动而产生的。

前提:

  • 物体的像素强度不会在连续帧之间改变
  • 一张图像中相邻的像素具有相似的运动

光流的计算方法 <概念可跳过>

第一帧中的像素I(x, y)在时间dt后移动到第二帧图像的I(x + dx, y + dy)处

根据灰度值不变得到:

I(x, y, t) = I(x + dx, y + dy, t + dt)

假设运动很小,从泰勒级数推导一阶泰勒展开式:

I(x + \bigtriangleup x, y + \bigtriangleup y, t + \bigtriangleup t) = I(x, y, t) + \frac{\partial I}{\partial x}\bigtriangleup x + \frac{\partial I}{\partial y}\bigtriangleup y + \frac{\partial I}{\partial t}\bigtriangleup t + \circ (x, y, t)

进行等式变换后,得到:

\frac{\partial I}{\partial x}dx + \frac{\partial I}{\partial y}dy + \frac{\partial I}{\partial t}dt = 0

同除以dt,得到:

\frac{\partial I}{\partial x}\frac{dx}{dt} + \frac{\partial I}{\partial y}\frac{dy}{dt}=- \frac{\partial I}{\partial t}

对等号右侧进行泰勒级数展开,消去相同项,并处以dt得到:

f_xu + f_yv + f_t = 0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值