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.mzph.cn/news/658425.shtml

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

相关文章

嵌入式Qt中实现http服务接收POST请求

嗨喽,大家好!以下知识点做个简单记录分享给小伙伴们! 首先我们来理解几个概念 websocket服务器和http服务器的区别 “ WebSocket服务器和HTTP服务器是两种不同的服务器类型,它们在协议、连接方式和通信模式等方面有所区别。 协议…

计算机网络-物理层设备(中继器 集线器)

文章目录 中继器中继器的功能再生数字信号和再生模拟信号同一个协议 集线器(多口中继器)不具备定向传输的原因集线器是共享式设备的原因集线器的所有接口都处于同一个碰撞域(冲突域)内的原因 小结 中继器 中继器的功能 中继器的…

中移(苏州)软件技术有限公司面试问题与解答(5)—— Linux进程调度参数调优是如何通过代码实际完成的1

接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(0)—— 面试感悟与问题记录 本文对于中移(苏州)软件技术有限公司面试问题中的“(11)Linux进程调度参数调优是如…

python爬虫爬取网站

流程: 1.指定url(获取网页的内容) 爬虫会向指定的URL发送HTTP请求,获取网页的HTML代码,然后解析HTML代码,提取出需要的信息,如文本、图片、链接等。爬虫请求URL的过程中,还可以设置请求头、请求参数、请求…

EasyExcel使用,实体导入导出

简介 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中…

深入浅出AI落地应用分析:AI个人助手Monica

前言:铺天盖地的大模型以及所谓的应用到目前为止实际还是很少有像Monica这样贴合个人工作习惯的产品落地,比如像Chatgpt等这样的产品,绝大多数人不会专门买🪜翻墙出去用,而且大多数场景下素人或小白都不知道该怎么用,但是Monica这款产品就很好的以浏览器的插件的形式始终…

PyTorch][chapter 12][李宏毅深度学习][Semi-supervised Linear Methods-1]

这里面介绍半监督学习里面一些常用的方案: K-means ,HAC, PCA 等 目录: K-means HAC PCA 一 K-means 【预置条件】 N 个样本分成k 个 簇 step1: 初始化簇中心点 (随机从X中抽取k个样本点作为) Repeat: For all in X: 根据其到 &…

[Bug] [OpenAI] [TypeError: fetch failed] { cause: [Error: AggregateError] }

[Bug] [OpenAI] [TypeError: fetch failed] { cause: [Error: AggregateError] } ubuntu20 win10 edge浏览器访问 服务器部署 页面打开后想使用chatgpt报错了 rootcoal-pasi1cmp:/www/wwwroot/ChatGPT-Next-Web# PORT3000 yarn start yarn run v1.22.19 warning package.json:…

LeetCode160. 相交链表

160. 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第23套

少儿编程 蓝桥杯青少组科技素养题真题及解析第23套 1、英国计算机科学家艾伦图灵于 1950 年提出了著名的“图灵测试”,用于判断计算机是否具有智能。“图灵测试”是通过()的方法进行判断的 A、让两台计算机对话 B、让人类与计算机对话 C、给计算机出题 D、让计算机分辨图…

【轮式平衡机器人】——TMS320F28069片内外设之ADC

一、ADC概述 这一部分不是我们的重点,原理分类啥的这里简要说明! 步骤:采样、保持、量化、编码 将采样电平(模拟值)转换为数字值的方法:直接比较型(并行ADC、逐次逼近型ADC)&…

2024.1.30 GNSS 学习笔记

站星双差Kalman滤波伪距差分定位流程 1. RTK定位技术(实时载波相位差分技术)原理-站间单差浮点解 1.RTK技术其实就是在RTD技术的基础上增加载波观测值的使用。由于伪距的噪声在分米量级,即使我们通过站间单差消除了绝大部分的误差影响&…

【React】前端项目引入阿里图标

【React】前端项目引入阿里图标 方式11、登录自己的iconfont-阿里巴巴矢量图标库,把需要的图标加入到自己的项目中去;2、加入并进入到项目中去选择Font class 并下载到本地3、得到的文件夹如下4. 把红框中的部分粘贴到自己的项目中(public 文…

爬虫入门到精通_基础篇4(BeautifulSoup库_解析库,基本使用,标签选择器,标准选择器,CSS选择器)

1 Beautiful说明 BeautifulSoup库是灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实线网页信息的提取。 安装 pip3 install beautifulsoup4解析库 解析器使用方法优势劣势Python标准库BeautifulSoup(markup,…

Web3.0初探

Web3.0初探 一、互联网发展史二、什么是Web3.0?三、现在的发展方向(衍生出来的产品):四、目前问题五、Web3.0与元宇宙 一、互联网发展史 Web3.0也就是第三代互联网。最新版本的Web3.0是以太坊的创始合伙人Gavin Wood在2014年提出…

Redis核心技术与实战【学习笔记】 - 7.Redis GEO类型 - 面向 LBS 应用的数据类型

前言 前面,介绍了 Redis 的 5 大基本数据类型:String、List、Hash、Set、Sorted Set,它们可以满足绝大多数的数据存储需求,但是在面对海里数据统计时,它们的内存开销很大。所以对于一些特殊的场景,它们是无…

全面解析msvcr100.dll丢失的解决方法,关于msvcr100.dll文件丢失是如何显示的

msvcr100.dll文件的丢失是一个常见的问题,它会导致一些应用程序无法正常运行或出现错误。为了解决这个问题,我们可以采取多种方法。下面将介绍几种常用的msvcr100.dll丢失的解决方法,通过采用合适的方法,我们可以轻松解决该问题&a…

C#,入门教程(36)——尝试(try)捕捉(catch)不同异常(Exception)的点滴知识与源代码

上一篇: C#,入门教程(35)——哈希表(Hashtable)的基础知识与用法https://blog.csdn.net/beijinghorn/article/details/124236243 1、try catch 错误机制 Try-catch 语句包含一个后接一个或多个 catch 子句的 try 块,这…

Python爬虫:XPath基本语法

XPath(XML Path Language)是一种用于在XML文档中定位元素的语言。它使用路径表达式来选择节点或节点集,类似于文件系统中的路径表达式。 不啰嗦,讲究使用,直接上案例。 导入 pip3 install lxmlfrom lxml import etr…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(6)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…