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…

智能车复工日记【3】:图像处理——基本扫线和基本特征提取和十字补线

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 目录 1、系列文章2、前言3、基本扫线(除了进入环岛状态或者坡道或者十字路口的普通扫线)1.基本数据和初步特征4、进一步特征…

short 用equals_Java Short类equals()方法的示例

short 用equals短类equals()方法 (Short class equals() method) equals() method is available in java.lang package. equals()方法在java.lang包中可用。 equals() method is used to check equality or inequality of this Object against the given Object or in other wo…

图解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;一个数…

智能车复工日记【2】——普通PID、变结构PID、微分先行PID、模糊PID、专家PID

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 目录 系列文章前言普通PID舵机参数:电机参数:变结构PI控制(电机控制,这里对公式进行修改采用正态分布公式)微分先行PID(…

爬动的蠕虫(C++)

问题描述&#xff1a; 一条虫子在n英寸深的井底&#xff0c;每次一分钟爬行u英寸&#xff0c;但是它再次爬行前必须先休息1分钟&#xff0c;在休息过程中它将滑落d英寸&#xff0c;在反复向上爬行和休息后&#xff0c;多长时间虫子能爬出这口井&#xff1f;在此过程中&#xf…

使用快捷键,快到极致

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

java反射对象赋值_Java反射详解

反射(Reflection)能够让运行于 JVM 中的程序检测和修改运行时的行为。Class类提供了以下方法四个public方法&#xff0c;用于获取某个类的构造方法&#xff1a;Constructor getConstructor(Class[] params)// 根据构造函数的参数&#xff0c;返回一个具体的具有public属性的构造…

Oracle装置后果

来历&#xff1a;网海拾贝 本日未来诰日装置Oracle后&#xff0c;出现了两个后果。 经过过程SQL Plus不竭无法连接长途数据库&#xff0c;提醒错误ORA-12514:TNS:监听过程不能解析在连接描绘符中给出的SERVICE_NAME。 厥后缔造用可视化的Net Configuration Assistant东西对监听…

Java Hashtable hashCode()方法及示例

Hashtable类hashCode()方法 (Hashtable Class hashCode() method) hashCode() method is available in java.util package. hashCode()方法在java.util包中可用。 hashCode() method is used to return the hash code value for this object in this Hashtable. hashCode()方法…

C---蝉、蜻蜓、蜘蛛

【问题描述】 已知 腿/条翅膀/对蝉61蜻蜓62蜘蛛80 现有小虫n只&#xff0c;共有X条腿和Y对翅膀&#xff0c;问蝉、蜻蜓、蜘蛛各有多少只&#xff1f;请使用循环的知识解决&#xff0c;数据确保有解。 【输入形式】三个用空格隔开的整数&#xff0c;依次为n、X、Y 【输出形式】…

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

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

python如何操作oracle数据库_python操作oracle数据库

搜索热词下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家&#xff0c;也给大家做个参考。# -*- mode: python; coding: utf-8 -*-## python operate oracle,contain insert、delete、update、select.## author liyulin# date 2014-11-07import…

可能用得上的jquery 插件

Chosen (github) 是一个强大的增强下拉选择框的插件&#xff0c;支持自定义css样式。同时你可以使用ajax增加一些回调函数&#xff0c;插件会给hidden input复制&#xff0c;这样你可以在提交表单的时候获得正确的值。 Turn.js 是一个 JavaScript 库&#xff0c;使您的网页内容…

草根创业回忆录二: 都选择的是什么人?

草根创业回忆录二: 都选择的是什么人&#xff1f; 前言&#xff1a;选合伙人和投资就像在选女朋友一样&#xff0c;要谨慎&#xff0c;甚至有时候宁缺毋滥。 曾经以为有了钱&#xff0c;就会找到需要的人&#xff0c;后来发现不是这样的。 也以为&#xff0c;随便拉几个关系好的…

float.equals_Java Float类equals()方法与示例

float.equals浮动类equals()方法 (Float class equals() method) equals() method is available in java.lang package. equals()方法在java.lang包中可用。 equals() method is used to check equality or inequality of this Object against the given Object or in other wo…

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…