24-光流估计

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

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

在这里插入图片描述

Lucas—Kanade算法

约束方程

在这里插入图片描述
如何求解方程组呢?看起来一个像素点根本不够,在物体移动过程中还有哪些特性呢?
在这里插入图片描述
在这里插入图片描述
cv2.calcOpticalFlowPyrLK():
cv2.calcOpticalFlowPyrLK(old_gray,frame_gray,p0,None,**lk_params)
参数:

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

返回:

nextPts 输出跟踪特征点向量
status 特征点是否找到,找到的状态为1,未找到的状态为0
import numpy as np
import cv2#E:\Jupyter_workspace\study\data/a.mp4视频最好为摄像头捕获视频,背景相对不变,变化得是行人汽车之类的较为容易识别得物体
cap = cv2.VideoCapture('E:\Jupyter_workspace\study\data/a.mp4')feature_params = dict(maxCorners = 100, qualityLevel = 0.3, minDistance = 7)#角点检测所需参数
#maxCorners最大角点个数100个
#qualityLevel品质因子,越大的话,角点越少
#minDistance最小距离,在这个距离里面那个角点最好,品质因子最好lk_params = dict(winSize = (15,15), maxLevel = 2)#lucas kanade参数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 = np.zeros_like(old_frame)#创建一个maskwhile(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)#需要传入前一帧和当前图像以及前一帧检测到的角点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()

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

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

相关文章

java公平索非公平锁_java中的非公平锁不怕有的线程一直得不到执行吗

首先来看公平锁和非公平锁,我们默认使用的锁是非公平锁,只有当我们显示设置为公平锁的情况下,才会使用公平锁,下面我们简单看一下公平锁的源码,如果等待队列中没有节点在等待,则占有锁,如果已经…

mybatis.net - 5 嵌入资源与引用资源

在SqlMap.config文件中可以有两种方式引入外部的文件。 一种是通过资源的方式&#xff0c;在文件中表现为 resource&#xff0c;就是引用外部的文件&#xff0c;这里需要保证文件的路径正确。 <sqlMaps><sqlMap resource"Maps/ProductMap.xml"/><sqlM…

图解MySQL数据库的陈列和把持-4

泉源&#xff1a;网海拾贝 填入一些测试数据&#xff1a; 封闭“MySQL Query Browser”&#xff0c;再从头翻开它&#xff0c;切换到testtable表&#xff0c;看到了没有&#xff1f;刚刚输出的中文变成了“&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&am…

非常好友(C++)

Bessie和其他的所有奶牛的耳朵上都戴有一个射频识别&#xff08;RFID&#xff09;序列号码牌。因此农夫John可以机械化地计算他们的数量。很多奶牛都有一个“牛友”。如果奶牛A的序列号的约数之和刚好等于奶牛B的序列号&#xff0c;那么A的牛友就是B。在这里&#xff0c;一个数…

使用快捷键,快到极致

前段时间曾经写过一篇文章&#xff0c;《优秀程序员无他-善假于物也》。其中谈到一点是优秀的程序员必须要能灵活的掌握常用软件的快捷键。对于程序员来说&#xff0c;每天使用时间最长的软件恐怕就是IDE&#xff08;Integrated Development Environment&#xff09;了。如果你…

轮廓(查找和绘制轮廓、轮廓的表达与组织、轮廓的特性)

目录1、轮廓的定义2、如何在图像中找到轮廓opencv自带的查找轮廓函数:findContours()3、轮廓的表达方式1.顶点的序列2.Freeman链码4、轮廓之间的组织方式5、轮廓的特点&#xff08;这部分可以展开来详细探讨&#xff0c;这里不做过多解释&#xff09;6、轮廓的匹配7、绘制轮廓d…

01-基本配置与测试

一、开发环境 使用的是Anaconda 3&#xff0c;其中Python版本为3.6.3 首先&#xff0c;在Anaconda下的Scripts文件夹下打开命令框 使用pip install -U selenium安装selenium 打开Jupiter Notebook&#xff0c;输入from selenium import webdriver进行测试 不报错即安装成功 …

Opencv——查找并绘制凸包、凸包与轮廓的关系

定义 给定二维平面上的点集&#xff0c;凸包就是将最外层的点连接起来构成的凸多边型。 理解物体形状或轮廓的一 种比较有用的方法便是计算一个物体的凸包&#xff0c;然后计算其凸缺陷(convexity defects)。 检测凸包 opencv自带函数&#xff1a;convexHull() 参数解释&a…

java接口并发衡量_java 后端设计高并发接口总结

如何设置高并发接口一、并发队列的选择二、请求接口的合理设计三、高并发下的数据安全3.1 超发的原因3.2 悲观锁思路3.3 FIFO队列思路3.4 乐观锁思路一、并发队列的选择Java的并发包提供了三个常用的并发队列实现&#xff0c;分别是&#xff1a;ArrayBlockingQueue、Concurrent…

JAVA 取得当前目录的路径

在写java程序时不可避免要获取文件的路径...总结一下,遗漏的随时补上 1.可以在servlet的init方法里 String path getServletContext().getRealPath("/"); 这将获取web项目的全路径 例如 :E:/eclipseM9/workspace/tree/ tree是我web项目的根目录 2.你也可以随时在任意…

02.1-元素定位(find)

常用的一些方法 一、导包 from selenium import webdriver二、打开火狐&#xff08;空白页&#xff09; b webdriver.Firefox()三、跳转到指定的网站 b.get(https://www.baidu.com/)四、将浏览器页面最大化 b.maximize_window()五、通过F12可查看当前的贴吧为超链接形式 …

快速傅里叶变换(FFT)——按时间抽取DIT的基

目录【1】前言1、DIF计算量2、利用性质改善【2】公式推导1、N 到 2*N/2a、分解原序列b、分解后的DFT变换c、一系列化简操作之后d、蝶形信号流e、计算量总结2、N/2 到 2*N/4a、分解X2(k)序列b、蝶形信号流&#xff08;2列&#xff09;3、N/4 到 2*N/8a、蝶形信号流&#xff08;3…

快速傅里叶变换(FFT)——按频率抽取DIF的基

目录【1】回顾DIT【2】算法原理【3】运算特点【1】回顾DIT https://blog.csdn.net/qq_42604176/article/details/105559756 【2】算法原理 设序列点数&#xff1a;N2^M,M为正整数。将输入序列按照前一半、后一半分开。&#xff08;并非按照奇偶分&#xff09; 由于&#xf…

莫比乌斯函数---C++

【问题描述】 莫比乌斯函数&#xff0c;数论函数&#xff0c;由德国数学家和天文学家莫比乌斯(Mobius&#xff0c;1790-1868)提出。梅滕斯(Mertens)首先使用μ(n)作为莫比乌斯函数的记号。而据说&#xff0c;高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数。莫比乌斯函数在数…

Opencv——findContours函数再探(由轮廓联想连通域)

目录关于调参的一些思考分析图像的一些角度面积、周长、矩形度、圆形度、宽长比例1&#xff1a;找出汽车轮毂圆孔&#xff08;从轮廓和连通域两个角度&#xff09;例2&#xff1a;找出芯片中间正方形物体例3&#xff1a;桌面上橘色物体总结关于调参的一些思考 合理的参数设置&…

modelsim 编译 xilinx库

1.为单个工程加入库 在某一个目录建立工程 然后 vlib unisim vcom -work unsim *.vhd 然后就加入了unisim库 如果是windows的话&#xff0c;工程文件mpf应该是记录了这个库的信息&#xff0c;所以重新打开这个工程时&#xff0c;依然有这个库 linux&#xff0c;不用gui界面…

php 载入css就可以显示,如何在进度条加载后显示页面

1.思路&#xff1a;加入很多图片&#xff0c;以延迟加载时间&#xff0c;实现加载完后显示图片。定义一个外层p&#xff0c;覆盖住图片&#xff0c;在内层p中引入加载时显示的图片&#xff0c;让内层p居中在页面上&#xff0c;利用setInterval定时器设置3秒后将外层p隐藏&#…

如何获取轮廓(连通域)的面积、周长、矩形度、圆形度、宽长比、周径比等形状描述符?

博主联系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里会有往届的smarters和电赛选手&#xff0c;群里也会不时分享一些有用的资料&#xff0c;有问题可以在群里多问问。 目录前言1、轮廓面积获取函数2、轮廓周长获取函数3、轮廓圆形度计算4、矩形度计算…

01-基础部分

一、tensorflow和opencv测试 import tensorflow as tf import cv2hello tf.constant(hello tensorflow) session tf.Session() print(session.run(hello))print(hello opencv)运行效果如下&#xff1a; 二、基础部分 1、opencv基础 代码三部曲&#xff1a; 1、引入Open…

网络和通信 - Silverlight 中的 HTTP 通信和安全

Silverlight 支持几种使用 HTTP/HTTPS 的方案。虽然可以使用多种方式和技术执行 HTTP 调用&#xff0c;但是下表描述的是针对这些 HTTP 通信方案的建议方法 执行 HTTP 调用的选项 确定应由浏览器还是客户端来执行应用程序的 HTTP 处理后&#xff0c;应在创建任何 Web 请求之前指…