当前位置: 首页 > news >正文

基于单目的光流法测速

目录

 1.简介

2.代码实现


 1.简介

基于单目的光流法是一种常见的计算机视觉技术,用于估计图像序列中物体的运动速度。它通过分析连续帧之间的像素变化来推断物体在图像中的移动情况。

背景: 光流法是计算机视觉领域中最早的运动估计方法之一,最早由Horn和Schunck在1981年提出。它基于光流假设,即相邻帧上的像素具有相似的灰度值,且相似的像素在移动过程中会产生相同的位移。光流法不仅可以用于物体的运动跟踪和姿态估计,还可以应用于目标检测、行为分析、视频压缩等领域。

意义: 基于单目的光流法进行速度测量在实际应用中具有广泛的意义,以下是其中一些重要的方面:

  1. 交通监控和智能交通:通过分析交通摄像头拍摄的连续图像序列,可以估计车辆、行人或其他交通参与者的速度。这对于交通管理、拥堵监测、事故预警等都非常重要。

  2. 运动分析和姿态估计:光流法可以帮助理解物体的运动行为,如运动目标的速度、加速度以及物体的姿态变化。这对于运动分析、动作捕捉和姿态估计等应用非常有价值,比如在体育训练、动画制作和人机交互中广泛应用。

  3. 视频增强和稳定:利用光流法可以对图像序列进行运动补偿和稳定,减少图像中的抖动或运动模糊。这对于视频增强、图像合成和虚拟现实等应用非常重要。

  4. 无人驾驶和机器人导航:光流法可以帮助无人驾驶车辆和机器人估计周围环境中物体的运动状态和速度信息,从而更好地规划路径、避障和控制运动。

总之,基于单目的光流法测速在多个领域具有广泛的应用前景,能够提供有关物体运动速度和行为的关键信息,从而为实时控制、决策和分析提供支持。

 

2.代码实现

光流法是一种基于图像序列的运动估计方法,其中涉及到的主要函数包括:

  1. cv2.calcOpticalFlowPyrLK():该函数用于计算稀疏光流。它接受前一帧图像和当前帧图像作为输入,并根据给定的特征点或兴趣区域跟踪这些特征点在两个图像之间的位置变化。函数返回被成功追踪的特征点的新位置以及一个状态值。

  2. cv2.calcOpticalFlowFarneback():该函数用于计算稠密光流。它接受前一帧图像和当前帧图像作为输入,并估计整个图像中每个像素点的运动向量。函数返回每个像素点的光流向量值。

  3. cv2.goodFeaturesToTrack():该函数用于在图像中检测良好的特征点。它接受输入图像和一些参数,如角点检测方法、特征点数量等,并返回检测到的良好特征点的坐标。

  4. cv2.drawOpticalFlow():该函数用于可视化光流结果。它接受一张彩色图像和光流向量作为输入,并在图像上绘制箭头表示运动方向和强度。

这些函数是常见的在OpenCV库中使用的光流算法相关函数,可以帮助实现光流法的运动估计和分析。根据具体的应用场景和需求,您可以选择合适的函数进行使用和调整参数。

像素级测速,真实世界测速需要拿到相机内参

import cv2
import time
import numpy as np
from ours import *# 打开摄像头(也可打开视频文件)cap = cv2.VideoCapture('./10.mp4')# onnx_path = 'yolov5s.onnx'
# model = Yolov5ONNX(onnx_path)# 创建随机颜色向量,用于绘制光流向量
color = np.random.randint(0, 255, (100, 3))# 获取第一帧图像
ret, frame_pre = cap.read()
frame_preGray = cv2.cvtColor(frame_pre, cv2.COLOR_BGR2GRAY)# 设置角点检测参数
feature_params = dict(maxCorners=50, qualityLevel=0.3, minDistance=7, blockSize=7)# 设置光流法参数
lk_params = dict(winSize=(15, 15), maxLevel=2, criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))# 获取第一帧角点
p0 = cv2.goodFeaturesToTrack(frame_preGray, mask=None, **feature_params)# 创建蒙版
mask = np.zeros_like(frame_pre)while True:# 获取当前帧图像ret, frame = cap.read()img = frame.copy()# or_img, box_coords = model.detect(img)frameGray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 使用光流法计算运动向量p1, st, err = cv2.calcOpticalFlowPyrLK(frame_preGray, frameGray, 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, (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)# 绘制运动速度直方图magnitude, angle = cv2.cartToPolar(good_new[..., 0] - good_old[..., 0], good_new[..., 1] - good_old[..., 1])hist, bins = np.histogram(magnitude, bins=50)bin_mids = (bins[:-1] + bins[1:]) / 2.speed = bin_mids[np.where(hist == np.max(hist))[0][0]]# 将光流运动轨迹叠加到原始图像上img = cv2.add(frame, mask)# 显示结果图像cv2.imshow('frame', img)if cv2.waitKey(1) & 0xFF == ord('q'):break# 更新下一帧的角点frame_preGray = frameGray.copy()p0 = good_new.reshape(-1, 1, 2)# 输出速度信息print("当前速度为: {:.2f} 像素/帧".format(speed))# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()

当前速度为: 0.55 像素/帧
当前速度为: 0.82 像素/帧
当前速度为: 0.34 像素/帧
当前速度为: 0.56 像素/帧
当前速度为: 0.22 像素/帧
当前速度为: 1.03 像素/帧
当前速度为: 1.33 像素/帧


 

相关文章:

基于单目的光流法测速

目录 1.简介 2.代码实现 1.简介 基于单目的光流法是一种常见的计算机视觉技术,用于估计图像序列中物体的运动速度。它通过分析连续帧之间的像素变化来推断物体在图像中的移动情况。 背景: 光流法是计算机视觉领域中最早的运动估计方法之一&#xff0c…...

排序-算法

文章目录 一、排序的概念及引用1.1 排序概念1.2 排序运用1.3 常见排序算法 二、常见排序算法的实现2.1 插入排序2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序 2.2 选择排序2.2.1 基本思想2.2.2 直接选择排序2.2.3 堆排序 2.3 交换排序2.3.1 冒泡排序2.3.2 快速排序2.3.3 快…...

【特纳斯电子】基于单片机的火灾监测报警系统-实物设计

视频及资料链接:基于单片机的火灾监测报警系统-实物设计 - 电子校园网 (mcude.com) 编号: T0152203M-SW 设计简介: 本设计是基于单片机的火灾监测报警系统,主要实现以下功能: 1.通过OLED显示温度、烟雾、是否有火…...

网络安全就业形势怎么样?

泻药,以下都是我本人的肺腑之言,是答主深耕职场多年,转战数家公司总结周围朋友的从业经验才总结出来的行业真相,真心希望帮助到还没有步入职场的大家,尤其是24届的应届毕业生,多掌握些就业信息就能少走一些…...

【Golang】Go的并发和并行性解释。谁说Go不是并行语言?

偶然发现百度上有很多"师出同门"的"go是并发语言,而不是并行语言"的说法。让我顿感奇怪,"并行"说白了就是对CPU多核的利用,这年头不能利用多核的编译语言还有的混?而且还混的这么好?并且…...

k8s-16 k8s调度

调度器通过 kubernetes 的 watch 机制来发现集群中新创建且尚未被调度到 Node上的 Pod。调度器会将发现的每一个未调度的 Pod 调度到一个合适的 Node 上来运行。 kube-scheduler 是 Kubernetes 集群的默认调度器,并且是集群控制面的一部分如果你真的希望或者有这方面…...

【2023研电赛】全国技术竞赛一等奖:基于FPGA的超低时延激光多媒体终端

该作品参与极术社区组织的研电赛作品征集活动,欢迎同学们投稿,获取作品传播推广,并有丰富礼品哦~ 基于FPGA的超低时延激光多媒体终端 参赛单位:华东师范大学 指导老师:刁盛锡 参赛队员:王泽宇 谢祖炜 秦子淇…...

Annoy vs Milvus:哪个向量数据库更适合您的AI应用?知其然知其所以然

1. Annoy vs Milvus简介 Annoy 和 Milvus 都是用于向量索引和相似度搜索的开源库,它们可以高效地处理大规模的向量数据。 Annoy(Approximate Nearest Neighbors Oh Yeah): Annoy 是一种近似最近邻搜索算法,它通过构…...

android 13.0 SystemUI导航栏添加虚拟按键功能(一)

1.概述 在13.0的系统产品开发中,在系统SystemUI的原生系统中默认只有三键导航,想添加其他虚拟按键就需要先在构建导航栏的相关布局中分析结构,然后添加相关的图标xml就可以了,然后添加对应的点击事件,就可以了,接下来先分析第一步关于导航栏的相关布局情况 然后实现功能 …...

内存管理-分页、虚拟地址、虚拟内容、页面置换算法

文章目录 一、5W2H角度分析内存管理What是内存管理Why需要内存管理Who使用内存管理Where内存管理应用When需要内存管理How内存管理工作How much内存管理的成本 二、分页什么是分页分页的原理分页的优缺点分页的应用 三、虚拟地址什么是虚拟地址虚拟地址的作用虚拟地址的转换虚拟…...

【C++入门】命名空间详解(从零开始,冲击蓝桥杯)

C入门 命名空间 南喵小鸡汤程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。一 . 命名空间的介绍二.命名空间的实际应用1.为什么要有命名空间我们在使用变量时,通常会为他定义一个名字,在…...

通过代码MyBatis-plus实现对表中createTime和updateTime进行自动更新

通过代码MyBatis-plus实现对表中createTime和updateTime进行自动更新 实现这样的效果可以在数据库中设置&#xff0c;但是我们一般建议在代码里实现&#xff0c; 但是总不能每次insert和update的时候都手写new当前时间 因此推荐使用mybatis-plus 1导入依赖 <dependency&g…...

HTML 实时显示本地电脑时间(精确到毫秒)

<!DOCTYPE html> <html> <head><title>实时显示本地电脑时间&#xff08;精确到毫秒&#xff09;</title> </head> <body><h1>本地电脑时间&#xff08;精确到毫秒&#xff09;&#xff1a;</h1><h1 id"clock&q…...

opencv跨平台arm交叉编译之ubuntu

目录 1. 安装交叉编译工具链2. 安装依赖3. 配置工具链3.1 新建build目录3.2 安装cmake-gui3.3 工具链配置界面进行配置3.3.1 终端输入以下命令3.3.2 点击Configure&#xff0c;弹出编译方式选择对话框&#xff1a;3.3.3 点击Next3.3.4 点击Finish3.3.5 点击Configure。3.3.6 Ge…...

Git命令全集

1、克隆代码 查看项目地址 git remote -v直接克隆 git clone url克隆指定分支 git clone -b 分支 git地址RPC failed错误:修改Git的传输字节限制 git config --global http.postBuffer 10485760002、查看分支 查看 git branch -a切换分支 git branch 分支名从指定分支…...

[BigData:Hadoop]:安装部署篇

文章目录 一&#xff1a;机器103设置密钥对免密登录二&#xff1a;机器102设置密钥对免密登录三&#xff1a;机器103安装Hadoop安装包3.1&#xff1a;wget拉取安装Hadoop包3.2&#xff1a;解压移到指定目录3.2.1&#xff1a;解压移动路径异常信息3.2.2&#xff1a;切换指定目录…...

ubuntu 上vscode使用cmake编译运行c++程序

参考&#xff1a;ubuntu 上vscode使用cmake编译运行c程序_vscode ubuntu运行c程序_SCH0的博客-CSDN博客 文章是对官方过程的翻译&#xff1a; Get started with CMake Tools on Linux...

Node.js 新特性 SEA/单文件可执行应用尝鲜

#1 关于 SEA 单文件可执行应用&#xff08;SEA&#xff0c;Singe Executable Applications&#xff09;&#xff0c;是 Node.js 新版本的特性&#xff0c;最初在 v19.7.0、v18.16.0 加入&#xff0c;并在 v20.x 得到扩展。而上个月发布的全家桶 Bun.js&#xff0c;就自带了 SEA…...

137.只出现一次的数字II

137. 只出现一次的数字 II - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来…...

k8s-15 strogeclass

官网&#xff1a; https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner StorageClass提供了一种描述存储类 (class)的方法&#xff0c;不同的cass可能会映射到不同的服务质量等级和备份策略或其他策略等 每个 StorageClass 都包含 provisioner、parameters 和…...

别再只盯着GPU了!聊聊华为昇腾310/910芯片在AI推理和训练中的实战选型心得

华为昇腾芯片实战选型指南&#xff1a;如何用310/910构建高性价比AI计算方案 当你在深夜调试一个即将上线的图像识别模型时&#xff0c;服务器机房的轰鸣声和不断攀升的电费账单可能比代码bug更让人焦虑。三年前&#xff0c;我们团队就面临这样的困境——用8块NVIDIA V100训练的…...

量子行走:从理论到Python实现——3. 量子门、电路与编程基础

目录 3. 量子门、电路与编程基础 3.1 单量子比特门 3.1.1 泡利门与旋转门 3.1.2 哈达玛门与相位门 3.2 多量子比特门 3.2.1 受控门 3.2.2 纠缠门与SWAP操作 3.3 量子电路构建与优化 3.3.1 电路表示与DAG结构 3.3.2 变分电路 3. 量子门、电路与编程基础 量子计算体系的…...

GF-1遥感影像水体提取实战:Unet++、Deeplabv3+、MANet模型对比与避坑指南

GF-1遥感影像水体提取实战&#xff1a;三大模型对比与避坑全攻略 当国产高分一号&#xff08;GF-1&#xff09;卫星数据遇上深度学习语义分割技术&#xff0c;水体提取这项传统遥感任务正在经历革命性变革。本文将带您深入Unet、Deeplabv3和MANet三大主流模型在GF-1影像上的实战…...

部署开源的Minecraft服务器智能运维管理系统 Minecraft-Rcon-Manage 自存简易教程

项目地址&#xff1a;Minecraft-Rcon-Manage 前言 笔者最近寻找一款能实现Minecraft服务器RCON远程访问的工具&#xff0c;找到了这个目前正在持续更新、功能丰富的开源项目Minecraft-Rcon-Manage&#xff0c;但实际部署过程中发现作者提供的教程博客无法正常访问&#xff0c…...

阿联酋人工智能大学:AI能在战争迷雾中做出理性判断吗?

这项由阿联酋穆罕默德本扎耶德人工智能大学和美国马里兰大学共同完成的研究发表于2026年3月&#xff0c;论文编号为arXiv:2603.16642v1。有兴趣深入了解的读者可以通过该编号查询完整论文。在人类历史上&#xff0c;预测战争走向一直是个极其困难的任务。就像我们很难在暴风雨中…...

软件测试学习第一期

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集&#xff01; &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指…...

K230 vs树莓派视觉套件:300元预算该选谁?实测对比工业检测场景

K230与树莓派视觉套件&#xff1a;300元预算下的工业检测实战对比 在工业自动化浪潮中&#xff0c;视觉检测系统正从大型企业向中小型制造车间快速渗透。当预算被严格限制在300元区间时&#xff0c;K230开发板与树莓派摄像头组合成为最受关注的两种解决方案。我们历时三个月在6…...

微信支付回调通知收不到的5个隐藏坑(附.NET Core实战解决方案)

微信支付回调通知失效的深度排查与.NET Core实战指南 当支付流程顺利完成但回调通知却神秘消失时&#xff0c;这种"薛定谔式的支付成功"往往让开发者陷入调试泥潭。本文将揭示五个容易被忽视的技术暗礁&#xff0c;并提供可直接集成到生产环境的.NET Core解决方案。 …...

PingFangSC 字体技术深度解析:现代Web字体架构实践指南

PingFangSC 字体技术深度解析&#xff1a;现代Web字体架构实践指南 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件&#xff0c;包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC PingFangSC&#xff08;苹方-简&#…...

SGMICRO圣邦微 SGM6512YTS28G/TR TDFN-8L(2x2) 模拟开关/多路复用器

特性 典型导通电阻240120开路电阻平坦度3.3V至6V双电源供电操作3.3V至13.2V单电源工作电压-3dB带宽:70MHz轨到轨操作提供绿色TQFN-5x5-32L和TSSOP-28封装 工作温度范围:-40C至85C...