OpenCV | 光流估计

光流估计

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

  • 高度恒定:同一点随着时间的变化,其亮度不会发生改变。
  • 小运动:随着时间的变化不会引起位置的剧烈变化,只有小运动情况下才能用前后帧之间单位位置变化引起的灰度变化去近似灰度对位置的偏导数。
  • 空间一致:一个场景上临近的点投影到图像上也是临近点,且临近点速度一致,因为光流法基本方程约束只有一个,而要求x,y方向的速度,有两个未知变量, 所以需要联立n多个方程求解。

cv2.calcOpticalFlowPyrlLK(): 参数

  • prevlmage 前一帧图像
  • nextlmage 当前帧图像
  • prevPts 待跟踪的特征点向量
  • winSize 搜索窗口的大小
  • maxLevel 最大的金字塔层数 返回:
  • nextPts 输出跟踪特征点向量
  • status 特征点是否找到,找到的状态为1,未找到的状态为0

test

import numpy as np
import cv2cap = cv2.VideoCapture('test.avi')# 角点检测所需参数
feature_params = dict( maxCorners = 100,qualityLevel = 0.3,minDistance = 7,blockSize = 7 )# lucas kanade参数
lk_params = dict( winSize  = (15,15),maxLevel = 2,criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))# 随机颜色条
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]# draw the tracksfor i,(new,old) in enumerate(zip(good_new,good_old)):a,b = new.ravel()c,d = old.ravel()mask = cv2.line(mask, (int(a),int(b)),(int(c),int(d)), color[i].tolist(), 2)frame = cv2.circle(frame,(int(a),int(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()

运行后随便截取一帧为:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ProtoBuf一些踩坑记录

一、Protobuf学习基础 学习的资料很多也很全,这里添加几个链接进行Protobuf的基础学习的链接,链接中的案例使用C编辑: 链接:Protobuf介绍及简单使用(上)_google_protobuf_version-CSDN博客 Protobuf介绍及简单使用(下&…

MFC综合实验二学习记录

文章目录 如何确定消息映射宏中命令对应的菜单项资源虚函数和纯虚函数的区别?MFC中什么是UPDATE_COMMAND_UI 消息如何查看控件对应的成员变量模态对话框的理解HGDIOBJ" 类型的值不能用于初始化 "CBrush *" 类型的实体错误MFC编程中CDC类型和HDC类型有…

TOP 9 安卓手机系统和应用程序修复工具,可修复各种Android 系统问题

您的新 Android 手机可能因其令人兴奋的性能而印象深刻。然而,随着时间的推移,您可能会发现系统有些地方与以前不太一样。您可能会遇到屏幕无响应、 Android应用程序崩溃、连接问题、电池耗尽等现象。 好吧,在这些情况下您不必感到不安&…

centos通过yum安装redis

1. 安装yum添加epel源(此步根据环境,如果有源则可跳过,在阿里去可跳过) yum install epel-release 2 使用yum安装Redis yum install redis 出现如下图所示的内容,默认的安装路径是在 /usr/bin目录下: 文件安装路径…

三、C#面向对象编程(接口与实现)

在C#中,接口是一种定义方法但不包含实现的方式,可以被多个类实现以支持不同的行为。通过接口,我们可以定义一组标准的成员,让类遵循特定的契约。 下面是一个关于接口和实现的简单示例: // 定义一个接口 public inter…

特发性震颤的原因有哪些?

特发性震颤是一种神经系统疾病,其症状主要表现为身体部位的不自主地震颤,常常影响手部、头部和声音。特发性震颤的病因较为复杂,可能涉及到多种因素。 首先,遗传因素是特发性震颤的主要原因之一。研究表明,特发性震颤…

uniapp 微信小程序跳转至其他小程序

一、背景&#xff1a; 需要在目前的小程序中跳转到另一个小程序&#xff0c;跳转的目标小程序需要已经发布上线了 二、具体实现 使用uni.navigateToMiniProgram打开另一个小程序 官网指引&#x1f449;&#xff1a;uni.navigateToMiniProgram(OBJECT) | uni-app官网 <t…

vue前端常用工具类汇总

总结的工具类&#xff0c;可直接复用 utils文件夹中的util.js编写公共工具类 const initUtil {}Byte 转 KB/MB/GB initUtil.getfilesize (size 0,) > {if (!size) return 0.00GB;const num 1000.00; //byteif (size < num)return size "B";if (size <…

iview 选择框远程搜索 指定筛选的参数

问题&#xff1a;开启了filterable之后&#xff0c;选择框是允许键盘输入的&#xff0c;但是会对选择列表进行过滤&#xff0c;如果不想使用再次过滤&#xff0c;可以试下下面这个方法。 场景&#xff1a;输入加密前的关键字筛选&#xff0c;选择框显示加密后的数据 说明一&a…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存&#xff08;C&#xff09;&#xff09; Baumer工业相机Baumer工业相机的图像高速保存的技术背景Baumer工业相机通过NEOAPI SDK函数图像高速保存在NEOAPI SDK里实现线程高速图像保存&#xff1a;工业相机高…

rke2 offline install kubernetes v1.26

文章目录 1. 准备2. 安装 ansible3. 基础配置3.1 配置 hosts3.2 安装软件包3.3 内核参数3.4 连接数限制3.5 关闭swap 、selinux、防火墙3.6 时间同步 4. RKE2 安装4.1 下载安装4.2 配置其他管理节点4.3 新增 worker 节点 1. 准备 7 台主机 主机名ipcpu内存diskos角色user密码…

11.3编写Linux串口驱动

编写串口驱动主要步骤 构建并初始化 struct console 对象&#xff0c;若串口无需支持 console 可省略此步骤 //UART驱动的console static struct uart_driver virt_uart_drv; static struct console virt_uart_console {//console 的名称&#xff0c;配合index字段使用&…

UniApp登录后如何实现页面跳转?

随着移动设备普及&#xff0c;越来越多的开发者选择使用uniapp来构建他们的应用。uniapp的跨平台特性大大提高了开发效率&#xff0c;简化了应用的运营和维护工作。在uniapp应用中&#xff0c;登录跳转页面是一个重要的功能&#xff0c;它能够确保用户安全地访问应用内的敏感信…

unity C#中Array、Stack、Queue、Dictionary、HashSet优缺点和使用场景总结

文章目录 数组 (Array)列表 (List<T>)栈 (Stack<T>)队列 (Queue<T>)链表 (LinkedList<T>)哈希表 (Dictionary<TKey, TValue>) 或 HashSet<T>集合 (Collection<T>) 数组 (Array) 优点&#xff1a; 高效访问&#xff1a;通过索引可以…

Zabbix相关问题及答案(2024)

1、Zabbix是什么&#xff1f;有什么作用&#xff1f; Zabbix是一个企业级的开源监控解决方案&#xff0c;设计用于监控和跟踪服务器、网络设备、硬件和软件的状态和性能。它由Alexei Vladishev开发&#xff0c;并且被广泛地用于各种不同规模的IT环境管理。 Zabbix的主要作用和…

1-04C语言执行过程

一、概述 本小节主要讲解一个C程序从源代码到最终执行的过程&#xff0c;这个过程又可以细分为两部分&#xff1a; 源代码到可执行文件的过程可执行文件在内存中执行 本小节是C语言基础当中&#xff0c;比较容易被初学者忽视的知识点。而实际上&#xff1a; 熟悉C程序从源文…

前端超好玩的小游戏合集来啦--周末两天用html5做一个3D飞行兔子萝卜小游戏

文章目录 💖飞行兔子萝卜小游戏💟效果展示💟代码展示源码获取💖飞行兔子萝卜小游戏 💟效果展示 💟代码展示 <body> <script src=

Debezium发布历史53

原文地址&#xff1a; https://debezium.io/blog/2019/04/11/debezium-0-9-4-final-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 0.9.4.Final 发布 四月 11, 2019 作者&#xff1a; Gunna…

如何选猫粮:买主食冻干猫粮需要注意什么?

随着养猫的人越来越多&#xff0c;铲屎官们对猫咪的饮食也越来越注重。除了猫粮&#xff0c;很多铲屎官还会给猫咪准备小零食。那么&#xff0c;猫咪是不是除了猫粮就没有其他可吃的了呢&#xff1f;答案当然不是。猫咪还有猫冻干、冻干猫粮、猫条等可以选择。每个铲屎官都希望…

Elasticsearch查询多个条件组合

在Elasticsearch&#xff08;ES&#xff09;中&#xff0c;你可以使用"bool"查询来组合多个条件。 下面是一个简单的例子&#xff0c;演示如何在一个查询中使用多个字段&#xff1a; 假设你有一个索引&#xff08;Index&#xff09;叫做"my_index"&#…