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 支持多种类型的字面量,包括整数、浮点数、布尔值、字符串、数组、字…...
拿捏循环链表
目录: 一:单链表(不带头单向不循环)与循环链表(带头双向循环)区别 二:循环链表初始化 三:循环链表头插 四:循环链表尾插 五:循环链表头删 六࿱…...
UMLChina公众号精选(20240207更新)
UMLChina服务 如何选择UMLChina服务 《软件方法》分步改进指南 做对《软件方法》强化自测题获得“软件方法建模师”称号 建模示范视频 [EA-029/石油钻井管理平台]35套UML/SysMLEA/StarUML的建模示范视频-全程字幕 UMLChina连EA经销商都不是,EA水平靠谱嘛?…...
东南亚手游市场攻略:出海前的关键准备与注意事项
随着全球游戏市场的日益繁荣,越来越多的手游企业开始将目光投向海外市场,其中东南亚地区因其庞大的用户基数和逐渐成熟的游戏市场环境,成为了不少企业的首选目标。然而,想要在东南亚市场取得成功,并非易事。本文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开发 源码
一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络࿰…...
YOLOv8改进 | 利用训练好权重文件计算YOLOv8的FPS、推理每张图片的平均时间(科研必备)
一、本文介绍 本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有帮助,可以清晰帮你展示出模型速度性能的提升以及轻量…...
std::vector<cv::Mat>和unsigned char** in_pixels 互相转换
将std::vectorcv::Mat转换为unsigned char** in_pixels, std::vector<cv::Mat> matVector; // 假设已经有一个包含cv::Mat的vector// 创建一个二维数组,用于存储像素数据 unsigned char** in_pixels new unsigned char*[matVector.size()]; for …...
04-Java建造者模式 ( Builder Pattern )
建造者模式 摘要实现范例 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象 一个Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的 建造者模式属于创建型模式,它提供了一种创建对…...
使用PHPStudy搭建Cloudreve网盘服务
文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局&#…...
Lua协程-coroutine
lua也有协程这个机制,用以完成非抢占式的多任务处理。 协程与线程 协程和线程类似,有自己的堆栈、局部变量、指令指针等等。但同时也有不一致的地方,其中最重要的地方在于多线程程序可以同一时间运行多个线程,而协程同一时间只能…...
HTML5+CSS3+移动web——HTML 基础
目录 一、标签语法 HTML的基本框架 1. 标题标签 2. 段落标签 3. 换行和水平线 4. 文本格式化标签 5. 图像标签 6. 路径 相对路径 绝对路径 7. 超链接标签 8. 音频 9. 视频 10. 注释 二、标签结构 一、标签语法 HTML 超文本标记语言——HyperText Markup Langua…...
Java中List接口的常用方法
列举一些List接口的常用方法 List接口是Java集合框架中的一个核心接口,它定义了一个有序的集合(也称为序列)。List接口继承自Collection接口,因此它包含了Collection接口中定义的所有方法,同时还增加了一些特定的方法…...
mysql基础从头到尾快速梳理
MYSQL数据库学习 mysql的启动 net start mysql net stop mysql MYSQL客户端的连接 mysql -h 127.0.0.1 -p 3306 -u root -p SQL SQL通用语法 SQL语句可以单行或者多行书写,以分号结尾SQL语句可以使用空格/缩进来增强语句的可读性Mysql数据库的SQL语句不区分大…...
MySQL用心总结
大家好,好久不见,今天笔者用心一步步写一份mysql的基础操作指南,欢迎各位点赞收藏 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath mysqld_bin_path(注意:等号与值之间有空格) mysql -h 地址 -…...
电路设计(13)——生产线易拉罐自动计数装置的proteus仿真
1.设计要求 使用指定元件,用模电、数电等有关知识,设计并制作一个易拉罐饮料计数自动化的模拟装置。生产单位常采用红外自动计数装置,将装有饮料的易拉罐放在马达带动的传动带上,在传动带运动的过程中让每个易拉罐依次同一方向地穿…...
微服务-微服务Alibaba-Nacos 源码分析 (源码流程图)-2.0.1
客户端注册临时实例,GRPC处理 客户端服务发现 及订阅处理 客户端数据变换,数据推送,服务端集群服务数据同步...
编码技巧——在项目中使用Alibaba Cloud Toolkit远程部署
背景 在新公司项目开发,当前项目为自建项目,意思是从开发到运维都需要自己负责,远程的服务器也是自己搭建的win操作系统; 之前在大厂工作时,一般提交代码之后,CICD流水线会自动的执行最新代码的拉取、构建打…...
深度学习如何入门?
深度学习是一个广泛且深入的领域,入门需要一些基础知识和学习资源。以下是一些推荐的步骤和资源: 数学基础:深度学习需要一些数学基础,包括线性代数、微积分、概率论和统计学。这些都是理解深度学习算法背后的原理的关键。 编程基…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...
深入理解 C++ 左值右值、std::move 与函数重载中的参数传递
在 C 编程中,左值和右值的概念以及std::move的使用,常常让开发者感到困惑。特别是在函数重载场景下,如何合理利用这些特性来优化代码性能、确保语义正确,更是一个值得深入探讨的话题。 在开始之前,先提出几个问题&…...
第2课 SiC MOSFET与 Si IGBT 静态特性对比
2.1 输出特性对比 2.2 转移特性对比 2.1 输出特性对比 器件的输出特性描述了当温度和栅源电压(栅射电压)为某一具体数值时,漏极电流(集电极电流...
