光流估计

  光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”,根据各个像素点的速度矢量特征,可以对图像进行动态分析,例如目标跟踪。

  1. 亮度恒定:同一点随着时间的变化,其亮度不会发生改变。

  2. 小运动:随着时间的变化不会引起位置的剧烈变化,只有小运动情况下才能用前后帧之间单位位置变化引起的灰度变化去近似灰度对位置的偏导数。

  3. 空间一致:一个场景上邻近的点投影到图像上也是邻近点,且邻近点速度一致。因为光流法基本方程约束只有一个,而要求xxx,yyy方向的速度,有两个未知变量。所以需要连立nnn多个方程求解。

Lucas-Kanade 算法

  如何求解方程组呢?看起来一个像素点根本不够,在物体移动过程中还有哪些特性呢?

  只有在角点的时候才可逆。

cv2.calcOpticalFlowPyrLK():

  参数:

  • prevImage 前一帧图像
  • nextImage 当前帧图像
  • prevPts 待跟踪的特征点向量
  • winSize 搜索窗口的大小
  • maxLevel 最大的金字塔层数

  返回:

  • nextPts 输出跟踪特征点向量
  • status 特征点是否找到,找到的状态为1,未找到的状态为0

Python代码实现

import numpy as np
import cv2cap = cv2.VideoCapture('test.avi')# 角点检测所需参数
feature_params = dict( maxCorners = 100,qualityLevel = 0.3,minDistance = 7)# lucas kanade参数
lk_params = dict( winSize  = (15,15),maxLevel = 2)# 随机颜色条
color = np.random.randint(0,255,(100,3))# 拿到第一帧图像
ret, old_frame = cap.read()
old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)
# 返回所有检测特征点,需要输入图像,角点最大数量(效率),品质因子(特征值越大的越好,来筛选)
# 距离相当于这区间有比这个角点强的,就不要这个弱的了
p0 = cv2.goodFeaturesToTrack(old_gray, mask = None, **feature_params)# 创建一个mask
mask = np.zeros_like(old_frame)while(True):ret,frame = cap.read()frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 需要传入前一帧和当前图像以及前一帧检测到的角点p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)# st=1表示good_new = p1[st==1]good_old = p0[st==1]# 绘制轨迹for i,(new,old) in enumerate(zip(good_new,good_old)):a,b = new.ravel()c,d = old.ravel()mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)frame = cv2.circle(frame,(a,b),5,color[i].tolist(),-1)img = cv2.add(frame,mask)cv2.imshow('frame',img)k = cv2.waitKey(150) & 0xffif k == 27:break# 更新old_gray = frame_gray.copy()p0 = good_new.reshape(-1,1,2)cv2.destroyAllWindows()
cap.release()

效果展示

  完整代码:https://github.com/ZhiqiangHo/Opencv-Computer-Vision-Practice-Python-

我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

计算机视觉实战(十六)光流估计 (附完整代码)相关推荐

  1. Android实战:网易新闻(附完整代码)

    一.源码地址:https://github.com/ambition-hb/News_1 二.部分内容效果图如下: (1)广告页面 (2)新闻界面 (3)热点新闻 (4)热点新闻详情界面 (5)新闻页 ...

  2. OpenCV Gunnar Farneback的密集光流算法(附完整代码)

    OpenCV Gunnar Farneback的密集光流算法 OpenCV Gunnar Farneback的密集光流算法 OpenCV Gunnar Farneback的密集光流算法 #includ ...

  3. OpenCV C++案例实战十六《制作哈哈镜图像》

    OpenCV C++案例实战十六<制作哈哈镜图像> 前言 一.凸透镜 1.功能源码 2.效果显示 二.凹透镜 1.功能源码 2.效果显示 三.源码 总结 前言 本文将使用OpenCV C+ ...

  4. 知识图谱实战案例完全剖析(附完整源码和数据集)-张子良-专题视频课程

    知识图谱实战案例完全剖析(附完整源码和数据集)-2070人已学习 课程介绍         课程定位:系统学习知识图谱的佳实践: 系统学习:完全覆盖知识建模.图数据库.知识应用和知识获取: 实战指引: ...

  5. 【element-ui】 el-table 表格动态合并相同数据单元格最全教程,可指定列+自定义合并条件,附完整代码

    el-table合并单元格 1.固定合并 官方挺提供的合并具体某行列的方法:el-table合并行或列 通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含 ...

  6. Python数据可视化:2018年北上广深空气质量分析(附完整代码)

    ♚ 法纳斯特,Python爱好者,喜欢爬虫,数据分析以及可视化. 就在这周偶然看到一个学弟吐槽天津的空气,不禁想起那段厚德载雾,自强不吸的日子. 无图无真相,下图为证. 左边的图是去年2月份的时候,这 ...

  7. 三次样条拟合(附完整代码)

    文章目录 一.推导步骤 二.三种不同端点约束下的三次样条拟合 1.给定起始速度 v 0 v_0 v0​与结束速度 v n v_n vn​ 2.起始位置 q 0 q_0 q0​与结束位置 q n q_n ...

  8. Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)

    Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一) 本文目录: 一.[旋转的精灵女孩]案例运行效果 二.Three.js简介 三.Three.js代码正常运行显示条件 (1)不载入 ...

  9. PCL提取3D点云模型特征(3.0 FPFH快速点特征直方图)附完整代码

    一.概述 上一篇博客解释了PFH是什么以及如何利用PFH来提取点云的特征,那么讲了PFH(PCL提取3D点云模型特征(2.0 PFH点特征直方图 )附完整代码)之后肯定是要接着说FPFH的.本来想着把 ...

  10. Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(三)

    Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(三) 本篇目录: 六.完整构建整个[旋转的精灵女孩]实例 (1).新建.启动webGL工程空间 (2).构建项目的目录层次结构 (2. ...

最新文章

  1. linux uart m200平台波特率500kbps乱码问题和输入不响应问题
  2. Web开发人员必读的12个网站
  3. 机器学习(MACHINE LEARNING)种群竞争模型
  4. Scatec Solar拟在乌克兰建设60MW光伏电站
  5. 抽象工厂和工厂方法示例_工厂方法设计模式示例
  6. Java 8中的StringJoiner与String.join的示例
  7. [单选题]?php echo ceil(2.1/0.7); ?
  8. SpringAOP导致@Autowired依赖注入失败
  9. Mac使用Docker搭建python测试执行环境
  10. 基于C#的安全聊天工具设计
  11. 阿里云移动推送学习笔记
  12. C语言使用栈和队列实现停车场管理
  13. 百度网盘怎么用迅雷下载
  14. 网络安全之路:我的系统性渗透测试学习框架
  15. ATECC508A芯片开发笔记(二):开发准备之 CryptoAuthLib 库简介与移植
  16. Transformer如何用于大规模图像识别?
  17. 杰理之获取恒流充电的挡位值【篇】
  18. 计算机不能识别监控硬盘分区,MBR 分区电脑无法识别 3TB 及以上硬盘的原因!
  19. android圆形图片,圆形背景文字的CircleTextImageView开源组件
  20. 项目管理之项目的挣值计算问题

热门文章

  1. android获取按钮上的字,Android--在一个Button上显示不同类型的字体
  2. C++ select模型聊天室初版
  3. 计算机网络之网络层服务和网络层服务模型
  4. BGP选路规则和负载分担
  5. 抓包神器之Charles,常用功能都在这里了
  6. 简洁/易用/灵活/高效-RecyclerView适配器封装
  7. HTML标记语言——文档标记设置
  8. 微信开发(1) -- 将本地开发环境映射到公网访问
  9. shell 查看Linux 进程 是否存在
  10. python下标是什么类型_python基本的数据类型