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

opencv-python计算视频光流

光流基本概念

光流表示的是相邻两帧图像中每个像素的运动速度和运动方向。具体:光流是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。

opencv光流算子

参考链接

光流法大全(DeepFlow、DenseFlow、DisFlow、FbFlow、PCAFlow、SimpleFlow、TV_L1)

视频光流计算demo

import os
import cv2
import flow_vis
import numpy as np
from tqdm import tqdmdef compute_flow(prev, curr, bound=15):'''Farneback optical flow'''# flow = cv2.calcOpticalFlowFarneback(prev=prev, next=curr, flow=None, pyr_scale=0.5, levels=5,winsize=15, iterations=3, poly_n=5, poly_sigma=1.1, flags=cv2.OPTFLOW_FARNEBACK_GAUSSIAN)''' TVL1 optical flow(需安装opencv_contrib)'''TVL1 = cv2.optflow.DualTVL1OpticalFlow_create()flow = TVL1.calc(prev, curr, None)''' deepflow optical flow (需安装opencv_contrib)'''# inst = cv2.optflow.createOptFlow_DeepFlow()# flow = inst.calc(prev, curr, None)''' sparse to dense flow optical flow (需安装opencv_contrib)'''# flow = cv2.optflow.calcOpticalFlowSparseToDense(prev, curr)''' pca flow optical flow (需安装opencv_contrib)'''# inst = cv2.optflow.createOptFlow_PCAFlow()# flow = inst.calc(prev, curr, None)''' DIS optical flow '''# dis = cv2.DISOpticalFlow_create(2)# flow = dis.calc(prev, curr, None)return flowdef video2flow(video_path:str, flow_path:str):''' 读取视频,获取视频基本信息 '''videoCapture = cv2.VideoCapture(video_path)if not videoCapture.isOpened():  # 若视频文件读取失败,读取下一段视频print('视频打开失败!!!')print(video_path)return Falsetotal_frames = int(videoCapture.get(cv2.CAP_PROP_FRAME_COUNT))  # 获取视频总帧数# fourcc = int(videoCapture.get(cv2.CAP_PROP_FOURCC))  # 原生不支持h264编码fps = videoCapture.get(cv2.CAP_PROP_FPS)  # 获取视频帧率w = int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH))  # 获取图像宽度h = int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 获取图像高度'''光流视频 写入设置 '''# fourcc = cv2.VideoWriter_fourcc(*'MJPG')  # avi格式fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # MP4格式video_flow = cv2.VideoWriter(flow_path, fourcc, fps, frameSize=(w, h), isColor=True)''' 计算光流并保存 '''success, prev = videoCapture.read()total_frames -= 1if not success:print('视频首帧读取失败')return Falsepbar = tqdm(total=total_frames)while total_frames:success, curr = videoCapture.read()if success:prev_gray = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY)curr_gray = cv2.cvtColor(curr, cv2.COLOR_BGR2GRAY)tmp_flow = compute_flow(prev_gray, curr_gray)rgb = flow_vis.flow_to_color(tmp_flow, convert_to_bgr=False)video_flow.write(rgb.astype(np.uint8))prev = curr# cv2.imshow('frame', flow_xy.astype(np.uint8))# cv2.waitKey(0)=='q'else:print('某中间帧读取失败,光流视频生成失败')return Falsepbar.update(1)total_frames -= 1videoCapture.release()video_flow.release()cv2.destroyAllWindows()return Trueif __name__=='__main__':video_path = './forest.mp4'flow_path = './forest_flow.mp4'print(video2flow(video_path, flow_path))

其中demo中flow_vis使用的光流调色板(Color wheel)如下,颜色代表光流方向,颜色深度代表光流速度
在这里插入图片描述

相关文章:

opencv-python计算视频光流

光流基本概念 光流表示的是相邻两帧图像中每个像素的运动速度和运动方向。具体:光流是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系&#xf…...

Spring 中获取 Bean 对象的三种方式

目录 1、根据名称获取Bean 2、根据Bean类型获取Bean 3、根据 Bean 名称 Bean 类型来获取 Bean(好的解决方法) 假设 Bean 对象是 User,并存储到 Spring 中,注册到 xml 文件中 public class User {public String sayHi(){retur…...

centos系统安装Ward服务器监控工具

简介 Ward是一个简约美观多系统支持的服务器监控面板 安装 1.首先安装jdk yum install java-1.8.0-openjdk-devel.x86_64 2.下载jar wget 3.启动 java -jar ward-1.8.8.jar 体验 浏览器输入 http://192.168.168.110:4000/ 设置服务名设置为:myserver 端口号:5000 点击…...

计算机网络-数据交换方式(电路交换 报文交换 分组交换及其两种方式 )

文章目录 为什么要数据交换?总览电路交换电路交换的各个阶段建立连接数据传输释放连接 电路交换的特点电路交换的优缺点 报文交换报文交换流程报文交换的优缺点 分组交换分组交换流程分组交换的优缺点 数据交换方式的选择分组交换的两种方式数据报方式数据报方式的特…...

【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]

阅读导航 引言一、设计模式概念(了解)二、单例模式1. 饿汉模式(1)概念(2)模拟实现(3)优缺点(4)适用场景 2. 懒汉模式(1)概念&#xff…...

【创建vue项目的两种方式】

Vue环境搭建 NodeJs安装包安装淘宝镜像 环境搭建webpack安装全局安装vue/cli查看模板创建项目1.webpack2. vue-cli NodeJs安装包 下载链接:官网链接 下载下来后,直接傻瓜式的安装即可。 通过在cmd控制台输入以下命令查看是否安装成功 node -v因为适配某…...

2. HarmonyOS应用开发DevEcoStudio准备-1

2. HarmonyOS应用开发DevEcoStudio准备-1 下载 DevEco Studio 进入HUAWEI DevEco Studio产品页产品页。 单击下载列表右侧的按钮,下载 DevEco Studio。 安装 DevEco Studio 下载完成后,双击下载的 deveco-studio-xxxx.exe,进入 DevEco St…...

《二叉树》——3(层序遍历)

目录 前言: 层序遍历: 解析: 前言: 本文主讲链式二叉树的层序遍历,在前面的张篇blog我们初步实现了链式二叉树递归部分的内容,对于递归算法的学习和思维方式我们仍然需要不断加强,所以将对链式二叉树进行…...

HarmonyOS应用开发者基础认证考试答案

HarmonyOS应用开发者基础认证考试答案 一、判断题 1.Ability是系统调度应用的最小单元,是能够完成一个独立功能的组件。一个应用可以包含一个或多个Ability。 正确(True) 2.所有使用Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide…...

【前端素材】bootstrap3 实现地产置业公司source网页设计

一、需求分析 地产置业公司的网页通常是该公司的官方网站,旨在向访问者提供相关信息和服务。这些网页通常具有以下功能: 公司介绍:网页通常包含有关公司背景、历史、核心价值观和使命等方面的信息。此部分帮助访问者了解公司的身份和目标。 …...

C++ 数论相关题目 博弈论 Nim游戏

给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。 问如果两人都采用最优策略,先手是否必胜。 输入格式…...

机器学习---无偏估计

1. 如何理解无偏估计 无偏估计:就是我认为所有样本出现的概率⼀样。 假如有N种样本我们认为所有样本出现概率都是 1/N。然后根据这个来计算数学期望。此时的数学期望就是我们平常讲 的平均值。数学期望本质就 是平均值。 2. 无偏估计为何叫做“无偏”&#xff1…...

C语言基础13

今天是学习嵌入式相关内容的第十四天,以下是今日所学内容 1.结构体: 1.结构体类型定义 2.结构体变量的定义 3.结构体元素的访问 4.结构体的存储 内存对齐 结构体整体的大小必须为最大基本类型长度的整数倍 5.结构体作为函数参数 值传递 练习:定…...

【Java】Maven配置加载到全局

Maven配置加载到全局 <build><plugins><plugin><artifactId>maven-resources-plugin</artifactId><configuration><encoding>utf-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configura…...

右手螺旋线定则

通电螺线管中的安培定则&#xff08;安培定则二&#xff09;&#xff1a;用右手握住通电螺线管&#xff0c;让四指指向电流的方向&#xff0c;那么大拇指所指的那一端是通电螺线管的N极。...

2024 高级前端面试题之 React 「精选篇」

该内容主要整理关于 React 模块的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 React模块精选篇 1. 如何理解React State不可变性的原则2. JSX本质3. React合成事件机制4. setState和batchUpdate机制5. 组件渲染和更新过程6. Diff算法相…...

OSPF协议解析及相关技术探索(C/C++代码实现)

OSPF&#xff08;开放最短路径优先&#xff09;是一种用于自治系统&#xff08;AS&#xff09;内部的路由协议&#xff0c;它是基于链路状态算法的。OSPF的设计目的是为了提供一种可扩展、快速收敛和高效的路由解决方案。 OSPF概念和特点 概念 自治系统&#xff08;AS&#…...

如何恢复已删除的照片?

在这篇综合文章中发现恢复丢失照片的有效且免费的方法。无论您使用的是智能手机、iPhone、Windows 计算机、Mac、SD 卡还是数码相机&#xff0c;我们都提供有关如何恢复已删除照片的分步说明。此外&#xff0c;学习一些有价值的技巧&#xff0c;以防止将来意外删除照片。 意外…...

VMware虚拟机安装macOS

VMware虚拟机安装macOS 文章目录 VMware虚拟机安装macOS先看效果一、准备工作①&#xff1a;镜像资源下载②&#xff1a;虚拟机③&#xff1a;安装macOS所必要的插件 二、开始安装①&#xff1a;创建新的虚拟机②&#xff1a;自定义硬件③&#xff1a;开启虚拟机 先看效果 一、…...

API管理协作工具:Apipost

相信无论是前端&#xff0c;还是后端的测试和开发人员&#xff0c;都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致&#xff0c;导致协作低效、频繁出问题&#xff0c;开发测试人员痛苦不堪。 API管理的难点在哪&#xff1f; 开发人员在 …...

新手友好:借助快马AI零基础实现openclaw101官网登录功能入门教程

今天想和大家分享一个特别适合编程新手的实践项目——如何用最简单的方式实现一个网站登录功能。作为一个刚入门的前端学习者&#xff0c;我发现登录功能看似简单&#xff0c;其实包含了很多核心知识点。通过InsCode(快马)平台&#xff0c;我们可以轻松获得一个完整可运行的登录…...

SAP 生产订单批量创建与下达实战:基于 BAPI_PRODORD_CREATE 的自动化方案

1. 为什么需要批量创建生产订单&#xff1f; 在制造业的实际业务场景中&#xff0c;生产计划部门经常需要根据销售订单、预测数据或库存情况&#xff0c;一次性生成大量生产订单。想象一下&#xff0c;一个汽车零部件工厂每月要处理上千个零部件的生产计划&#xff0c;如果每个…...

STM32F407 HAL库实战:TIM触发ADC+DMA实现多通道信号实时统计与可视化

1. 为什么需要TIM触发ADCDMA的多通道采集方案 在嵌入式数据采集系统中&#xff0c;实时性和效率往往是核心诉求。想象一下这样的场景&#xff1a;我们需要同时监测工业设备上的4个振动传感器&#xff0c;每个传感器的信号都需要以10kHz的频率采样。如果采用传统的轮询方式&…...

一个月突变!Linux内核大佬懵了:上个月还是“AI垃圾”,这个月AI Bug报告却突然靠谱?

整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;最近在做开源项目维护的开发者&#xff0c;可能会有一种奇怪的错觉&#xff1a;Bug 似乎报告变多了&#xff0c;而且变准了——更准确地说&#xff0c;是 AI 报的 Bug&#xff0c;突然开始“靠谱了”。…...

OpenClaw性能优化:千问3.5-9B模型加速30%的秘诀

OpenClaw性能优化&#xff1a;千问3.5-9B模型加速30%的秘诀 1. 为什么需要优化OpenClaw性能 第一次用OpenClaw执行自动化任务时&#xff0c;我遇到了一个尴尬的问题——点击"整理桌面文件"指令后&#xff0c;系统整整思考了15秒才开始移动第一个文件。这种延迟在简…...

ChatBI怎么在BI试点中用?3个低门槛落地场景亲测有效

ChatBI试点的前置门槛&#xff1a;先搞定最小可行数据集&#xff0c;不用全量建设 ChatBI是观远数据推出的自然语言分析产品&#xff0c;用户可以通过口语化的提问直接获取数据结果、可视化图表甚至分析结论&#xff0c;无需掌握复杂的报表制作或SQL查询技能。在BI试点阶段引入…...

Ant Design X:AI赋能前端开发的革命性工具

1. Ant Design X&#xff1a;当设计系统遇上AI会发生什么&#xff1f; 第一次听说Ant Design X时&#xff0c;我正在为一个电商项目焦头烂额地调试聊天机器人组件。传统方案需要自己对接NLP服务、处理对话状态、设计交互逻辑...直到同事扔给我一个链接&#xff1a;"试试这…...

Real-ESRGAN-GUI:如何用AI双引擎将模糊图片一键变高清

Real-ESRGAN-GUI&#xff1a;如何用AI双引擎将模糊图片一键变高清 【免费下载链接】Real-ESRGAN-GUI Lovely Real-ESRGAN / Real-CUGAN GUI Wrapper 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN-GUI 还在为模糊的老照片、低分辨率的动漫图片而烦恼吗&…...

别再乱选ASCII/HEX了!野火串口调试助手发送接收区配置详解(附实战案例)

串口通信调试实战&#xff1a;ASCII与HEX模式的选择艺术 调试智能家居设备时&#xff0c;你是否遇到过发送"ON"指令毫无反应&#xff0c;接收区却显示一堆乱码的尴尬&#xff1f;这往往不是设备故障&#xff0c;而是串口调试中最常见的模式选择错误。作为嵌入式开发者…...

PyTorch 2.8镜像真实效果:物理实验→电磁场/流体力学可视化视频

PyTorch 2.8镜像真实效果&#xff1a;物理实验→电磁场/流体力学可视化视频 1. 开箱即用的专业级物理模拟环境 当你第一次启动这个基于RTX 4090D优化的PyTorch 2.8镜像时&#xff0c;最直接的感受就是"专业工具就该这样"。这个镜像不是普通的深度学习环境&#xff…...