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)如下,颜色代表光流方向,颜色深度代表光流速度
在这里插入图片描述

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

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

相关文章

RISC-V指令格式

RISC-V指令格式 1 RISC-V指令集命名规范2 RISC-V指令集组成2.1 基础整数指令集2.2 扩展指令集 3 RISC-V指令格式3.1 指令表述3.2 指令格式 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 RISC-V指令集命名规范 前面提到过RV32I,这是…

谷粒商城【成神路】-【4】——分类维护

目录 1.删除功能的实现 2.新增功能的实现 3.修改功能的实现 4.拖拽功能 1.删除功能的实现 1.1逻辑删除 逻辑删除:不删除数据库中真实的数据,用指定字段,显示的表示是否删除 1.在application.yml中加入配置 mybatis-plus:global-config:…

基于springboot校园二手书交易管理系统源码和论文

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括乐校园二手书交易管理系统的网络应用,在外国二手书交易管理系统已经是很普遍的方式,不过国内的管理系统可能还处于起步阶段。乐校园二手书交易管理系统…

WebAssembly002 FFmpegWasmLocalServer项目

项目介绍 https://github.com/incubated-geek-cc/FFmpegWasmLocalServer.git可将音频或视频文件转换为其他可选的多媒体格式,并导出转码的结果 $ bash run.sh FFmpeg App is listening on port 3000!运行效果 相关依赖 Error: Cannot find module ‘express’ …

《Linux软件编程》的初步认识

一,Linux的认知: Linux 实际上来说是操作系统的内核,ubuntu是操作系统(包括redhat,centos,freebsd等) Linux(操作系统化的内核): 1.管理CPU 2.管理内存 3.管理硬…

基于WordPress开发微信小程序2:决定开发一个wordpress主题

上一篇:基于WordPress开发微信小程序1:搭建Wordpress-CSDN博客 很快发现一个问题,如果使用别人的主题模板,多多少少存在麻烦,所以一咬牙,决定自己开发一个主题模板,并且开源在gitee上&#xff…

redis 6.x集群搭建

redis6集群搭建 安装文件下载 redis-6.2.6.tar.gz 编译 tar -zxvf redis-6.2.6.tar.gz cd redis-6.2.6/ make MALLOClibc make install PREFIX/opt/soft/redis复制可执行文件 cp /opt/soft/redis/redis-cli /usr/bin/redis-cli cp /opt/soft/redis/redis-server /usr/bi…

2024 Flutter 重大更新,Dart 宏(Macros)编程开始支持,JSON 序列化有救

说起宏编程可能大家并不陌生,但是这对于 Flutter 和 Dart 开发者来说它一直是一个「遗憾」,这个「遗憾」体现在编辑过程的代码修改支持上,其中最典型的莫过于 Dart 的 JSON 序列化。 举个例子,目前 Dart 语言的 JSON 序列化高度依…

2024 年, Web 前端开发趋势

希腊哲学家赫拉克利特认为,变化是生命中唯一不变的东西。这句话适用于我们的个人生活、行业和职业领域。 尤其是前端开发领域,新技术、开发趋势、库和框架不断涌现,变化并不陌生。最近发生的一些事件正在改变开发人员构建网站和 Web 应用的方…

Vue2+ElementUI 弹窗全局拖拽 支持放大缩小

拖拽组件 dialogDrag.vue <template><div></div> </template> <script>export default {name: dialogDrag,data() {return {originalWidth: null,originalHeight: null}},created() {this.$nextTick(()>{this.dialogDrag()})},mounted() {}…

业务流程自动化平台在制造业应用案例,助力业务自动化、智能化

捷昌驱动成立于2000年&#xff0c;并于2018年9月在上海证券交易所上市&#xff0c;是一家专注于线性驱动产品研发、生产及销售的科技集团。 公司整合全球资源&#xff0c;为智慧办公、医疗康护、智能家居、工业自动化等关联产业提供驱动及智能控制解决方案&#xff0c;以科技驱…

一站式在线协作开源办公软件ONLYOFFICE,协作更安全更便捷

1、ONLYOFFICE是什么&#xff1f; ONLYOFFICE是一款功能强大的在线协作办公软件&#xff0c;可以创建编辑Word文档、Excel电子表格&#xff0c;PowerPoint&#xff08;PPT&#xff09;演示文稿、Forms表单等多种文件。ONLYOFFICE支持多个平台&#xff0c;无论使用的是 Windows、…

了解UDP发送过快导致的问题和对应解决方案

在当今这个以数据为核心的时代&#xff0c;企业对于数据传输的速度和稳定性有着日益增长的需求。UDP凭借其低延迟和高效率的特性&#xff0c;在实时通信和大规模数据传输领域扮演着关键角色。然而&#xff0c;UDP的无连接特性和缺乏可靠性也给数据传输带来了挑战&#xff0c;尤…

通过html2canvas和jsPDF将网页内容导出成pdf

jsPDF参考&#xff1a;https://github.com/parallax/jsPDF html2canvas参考&#xff1a;https://github.com/niklasvh/html2canvas 或者 https://html2canvas.hertzen.com 思路 使用html2canvas将选中DOM生成截图对象将截图对象借助jsPDF导出为PDF文件 代码 这是一个示例&a…

MySQL事务隔离级别

1 引言 隔离性在实际操作中比看起来复杂很多。ANSI SQL标准定义了4种隔离级别。如果是数据库领域的新手&#xff0c;强烈建议在阅读特定的MySQL实现之前先熟悉ANSI SQL的通用标准。这个通用标准的目标是定义在事务内外可见和不可见的更改的规则。较低的隔离级别通常允许更高的…

Deepin如何开启与配置SSH实现无公网ip远程连接

文章目录 前言1. 开启SSH服务2. Deppin安装Cpolar3. 配置ssh公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 前言 Deepin操作系统是一个基于Debian的Linux操作系统&#xff0c;专注于使用者对日常办公、学习、生活和娱乐的操作体验的极致&#xff0…

计算机网络——链路层(1)

计算机网络——链路层&#xff08;1&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU)前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c; [跳转到网站](https://www.captainbed.…

爬虫笔记(三):实战qq登录

咳咳&#xff0c;再这样下去会进橘子叭hhhhhh 以及&#xff0c;这个我觉得大概率是成功的&#xff0c;因为测试了太多次&#xff0c;登录并且验证之后&#xff0c;qq提醒我要我修改密码才可以登录捏QAQ 1. selenium 有关selenium具体是啥&#xff0c;这里就不再赘述了&#x…

Vue-49、Vue技术实现动画效果

1、首先&#xff0c;在Vue项目中的src/components文件夹下创建一个名为AnimatedBox.vue的文件。 2、编辑AnimatedBox.vue文件&#xff0c;添加以下代码&#xff1a; <template><div class"animated-box" click"toggle"><transition name&q…

低代码ERP系统助力企业成本优化,全面解析数字化转型之道!

在企业的日常运营中&#xff0c;成本管理是一项至关重要的任务。随着市场竞争的加剧和业务规模的扩大&#xff0c;传统的成本管理方式往往难以满足现代企业的需求。此时&#xff0c;ERP系统作为一种先进的企业资源管理工具&#xff0c;在成本管理领域展现出巨大的潜力和价值。它…