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

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)概念ÿ…...

【创建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. 无偏估计为何叫做“无偏”࿱…...

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…...

右手螺旋线定则
通电螺线管中的安培定则(安培定则二):用右手握住通电螺线管,让四指指向电流的方向,那么大拇指所指的那一端是通电螺线管的N极。...
2024 高级前端面试题之 React 「精选篇」
该内容主要整理关于 React 模块的相关面试题,其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 React模块精选篇 1. 如何理解React State不可变性的原则2. JSX本质3. React合成事件机制4. setState和batchUpdate机制5. 组件渲染和更新过程6. Diff算法相…...

OSPF协议解析及相关技术探索(C/C++代码实现)
OSPF(开放最短路径优先)是一种用于自治系统(AS)内部的路由协议,它是基于链路状态算法的。OSPF的设计目的是为了提供一种可扩展、快速收敛和高效的路由解决方案。 OSPF概念和特点 概念 自治系统(AS&#…...

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

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

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

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...