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

OpenCV识别视频中物体运动并截取保存

功能很简单:输入原始视频,输出视频中有画面变化的部分

适合理解基本框架,可以在这个基础上增加各种酷炫时髦的功能 [doge]

※注释非常保姆级※

import cv2
import numpy as np
import os
from datetime import datetime# 检测两帧之间变化
def detect_motion(frame1,frame2,threshold):# 计算两帧之间的绝对差异  diff=cv2.absdiff(frame1,frame2)# 将差异图像转换为灰度图gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)  # 对灰度图进行高斯模糊,减少噪声  blur=cv2.GaussianBlur(gray,(5,5),0)# 对模糊后的图像进行二值化处理,设置阈值  # thresh为二值化后的差异图像,其中运动物体为白色(255),背景为黑色(0)_,thresh=cv2.threshold(blur,threshold,255,cv2.THRESH_BINARY)return thresh# 保存运动帧
# 参数threshold为差异阈值,当像素差异大于此值时,认为是运动,可自行调整
def save_motion_frames(video_path,output_folder,threshold=25):# 打开视频文件  cap=cv2.VideoCapture(video_path)# 截取视频文件名,去掉扩展名如.mp4等,命名输出文件时用video_name=video_path[-14:-4]# 时-分-秒,命名输出文件时用edit_time=datetime.now().strftime("%H-%M-%S")# 获取视频的帧率和分辨率  # PS:这个参数是每秒有多少帧,可以自己设定,数值增大相当于视频加速fps = cap.get(cv2.CAP_PROP_FPS)  width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 使用XVID编解码器  fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 创建VideoWriter对象out = cv2.VideoWriter(os.path.join(output_folder, f'{video_name}-{edit_time}.avi'), fourcc,fps, (width, height)) # 读取第一帧# cap.read()可以类比吃豆人,吃掉就向前进,下一口是新的帧ret,prev_frame=cap.read()# 循环读取视频的每一帧  while ret:# 读取下一帧ret,curr_frame=cap.read()# 如果读完则跳出循环if not ret:break# 检测两帧之间有没有变化(即motion中有非零像素)  motion=detect_motion(prev_frame,curr_frame,threshold)# 如果有变化,则把后一帧写入VideoWriter对象if np.any(motion):out.write(curr_frame)# 读取框往后移动一帧,继续循环prev_frame=curr_frame# 释放视频文件out.release()cap.releaseoutput_folder = r"C:\Users\86171\Documents\Temp"  # 输出文件夹路径  
source=input('source file: ') #需要处理的视频文件夹路径
#遍历获取需要处理的视频
videos=[]
for root,dirs,files in os.walk(source):for file in files:file_path = os.path.join(root,file)  videos.append(file_path)
for video_path in videos: 
# 调用函数,保存包含运动的视频片段  save_motion_frames(video_path, output_folder)

相关文章:

OpenCV识别视频中物体运动并截取保存

功能很简单:输入原始视频,输出视频中有画面变化的部分 适合理解基本框架,可以在这个基础上增加各种酷炫时髦的功能 [doge] ※注释非常保姆级※ import cv2 import numpy as np import os from datetime import datetime# 检测两帧之间变化…...

6.Swift字面量

Swift 字面量 在 Swift 中,字面量是指直接指定数值、字符串、布尔值等常量的值的表示方式。使用字面量可以直接在代码中指定常量的值,而不需要通过变量或常量来存储。Swift 支持多种类型的字面量,包括整数、浮点数、布尔值、字符串、数组、字…...

拿捏循环链表

目录: 一:单链表(不带头单向不循环)与循环链表(带头双向循环)区别 二:循环链表初始化 三:循环链表头插 四:循环链表尾插 五:循环链表头删 六&#xff1…...

UMLChina公众号精选(20240207更新)

UMLChina服务 如何选择UMLChina服务 《软件方法》分步改进指南 做对《软件方法》强化自测题获得“软件方法建模师”称号 建模示范视频 [EA-029/石油钻井管理平台]35套UML/SysMLEA/StarUML的建模示范视频-全程字幕 UMLChina连EA经销商都不是,EA水平靠谱嘛&#xff1f…...

东南亚手游市场攻略:出海前的关键准备与注意事项

随着全球游戏市场的日益繁荣,越来越多的手游企业开始将目光投向海外市场,其中东南亚地区因其庞大的用户基数和逐渐成熟的游戏市场环境,成为了不少企业的首选目标。然而,想要在东南亚市场取得成功,并非易事。本文Nox聚星…...

python二维数组初始化的一个极其隐蔽的bug(浅拷贝)

初始化一个三行三列的矩阵 m n 3初始化方式1 a [[0 for i in range(m)] for j in range(n)]初始化方式2 b [] row [0 for i in range(0,m)] for i in range(0,n):b.append(row)分别输出两个初始化的结果 for row in a:print(row) for row in b:print(row)当前的输出为…...

iOS 需求 多语言(国际化)App开发 源码

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络&#xff0…...

YOLOv8改进 | 利用训练好权重文件计算YOLOv8的FPS、推理每张图片的平均时间(科研必备)

一、本文介绍 本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有帮助,可以清晰帮你展示出模型速度性能的提升以及轻量…...

std::vector<cv::Mat>和unsigned char** in_pixels 互相转换

将std::vectorcv::Mat转换为unsigned char** in_pixels&#xff0c; std::vector<cv::Mat> matVector; // 假设已经有一个包含cv::Mat的vector// 创建一个二维数组&#xff0c;用于存储像素数据 unsigned char** in_pixels new unsigned char*[matVector.size()]; for …...

04-Java建造者模式 ( Builder Pattern )

建造者模式 摘要实现范例 建造者模式&#xff08;Builder Pattern&#xff09;使用多个简单的对象一步一步构建成一个复杂的对象 一个Builder 类会一步一步构造最终的对象&#xff0c;该 Builder 类是独立于其他对象的 建造者模式属于创建型模式&#xff0c;它提供了一种创建对…...

使用PHPStudy搭建Cloudreve网盘服务

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…...

Lua协程-coroutine

lua也有协程这个机制&#xff0c;用以完成非抢占式的多任务处理。 协程与线程 协程和线程类似&#xff0c;有自己的堆栈、局部变量、指令指针等等。但同时也有不一致的地方&#xff0c;其中最重要的地方在于多线程程序可以同一时间运行多个线程&#xff0c;而协程同一时间只能…...

HTML5+CSS3+移动web——HTML 基础

目录 一、标签语法 HTML的基本框架 1. 标题标签 2. 段落标签 3. 换行和水平线 4. 文本格式化标签 5. 图像标签 6. 路径 相对路径 绝对路径 7. 超链接标签 8. 音频 9. 视频 10. 注释 二、标签结构 一、标签语法 HTML 超文本标记语言——HyperText Markup Langua…...

Java中List接口的常用方法

列举一些List接口的常用方法 List接口是Java集合框架中的一个核心接口&#xff0c;它定义了一个有序的集合&#xff08;也称为序列&#xff09;。List接口继承自Collection接口&#xff0c;因此它包含了Collection接口中定义的所有方法&#xff0c;同时还增加了一些特定的方法…...

mysql基础从头到尾快速梳理

MYSQL数据库学习 mysql的启动 net start mysql net stop mysql MYSQL客户端的连接 mysql -h 127.0.0.1 -p 3306 -u root -p SQL SQL通用语法 SQL语句可以单行或者多行书写&#xff0c;以分号结尾SQL语句可以使用空格/缩进来增强语句的可读性Mysql数据库的SQL语句不区分大…...

MySQL用心总结

大家好&#xff0c;好久不见&#xff0c;今天笔者用心一步步写一份mysql的基础操作指南&#xff0c;欢迎各位点赞收藏 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath mysqld_bin_path(注意&#xff1a;等号与值之间有空格) mysql -h 地址 -…...

电路设计(13)——生产线易拉罐自动计数装置的proteus仿真

1.设计要求 使用指定元件&#xff0c;用模电、数电等有关知识&#xff0c;设计并制作一个易拉罐饮料计数自动化的模拟装置。生产单位常采用红外自动计数装置&#xff0c;将装有饮料的易拉罐放在马达带动的传动带上&#xff0c;在传动带运动的过程中让每个易拉罐依次同一方向地穿…...

微服务-微服务Alibaba-Nacos 源码分析 (源码流程图)-2.0.1

客户端注册临时实例&#xff0c;GRPC处理 客户端服务发现 及订阅处理 客户端数据变换&#xff0c;数据推送&#xff0c;服务端集群服务数据同步...

编码技巧——在项目中使用Alibaba Cloud Toolkit远程部署

背景 在新公司项目开发&#xff0c;当前项目为自建项目&#xff0c;意思是从开发到运维都需要自己负责&#xff0c;远程的服务器也是自己搭建的win操作系统&#xff1b; 之前在大厂工作时&#xff0c;一般提交代码之后&#xff0c;CICD流水线会自动的执行最新代码的拉取、构建打…...

深度学习如何入门?

深度学习是一个广泛且深入的领域&#xff0c;入门需要一些基础知识和学习资源。以下是一些推荐的步骤和资源&#xff1a; 数学基础&#xff1a;深度学习需要一些数学基础&#xff0c;包括线性代数、微积分、概率论和统计学。这些都是理解深度学习算法背后的原理的关键。 编程基…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

基于 HTTP 的单向流式通信协议SSE详解

SSE&#xff08;Server-Sent Events&#xff09;详解 &#x1f9e0; 什么是 SSE&#xff1f; SSE&#xff08;Server-Sent Events&#xff09; 是 HTML5 标准中定义的一种通信机制&#xff0c;它允许服务器主动将事件推送给客户端&#xff08;浏览器&#xff09;。与传统的 H…...

C# WPF 左右布局实现学习笔记(1)

开发流程视频&#xff1a; https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码&#xff1a; GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用&#xff08;.NET Framework) 2.…...