OpenCV项目实战(1)— 如何去截取视频中的帧
前言:Hello大家好,我是小哥谈。针对一段视频,如何去截取视频中的帧呢?本节课就给大家介绍两种方式,一种方式是按一定间隔来截取视频帧,另一种方式是截取视频的所有帧。希望大家学习之后能够有所收获!🌈
目录
🚀1.按一定间隔截取视频帧
💥💥1.1 核心技术
💥💥1.2 实现步骤
💥💥1.3 实现代码
🚀2.截取视频中所有的帧
💥💥2.1 核心技术
💥💥2.2 实现步骤
💥💥2.3 实现代码
实例1:本实例将使用OpenCV从视频文件中按一定的视频帧数间隔截取视频帧,并将截取到的视频帧保存在项目images文件夹下。
🚀1.按一定间隔截取视频帧
💥💥1.1 核心技术
本实例将从视频文件中按每隔100帧截取视频帧,并将截取到的视频帧保存在images文件夹下。其中,在按每隔100帧截取视频帧之前,要先定义表示“记录读取到的帧数”和“每隔100帧”的两个标签。🌴
关键代码如下所示:
frame_number = 1 # 记录读取到的帧数,初始值为1frame_interval = 100 # 每隔100帧
具备了这两个标签后,再来编写“将截取到的视频帧保存在images文件夹下”的代码。需要注意的是,在拼接保存视频帧路径之前,要先把frame_number由整数转为字符串。
关键代码如下所示:
if (frame_number % frame_interval == 0): # 每隔100帧cv2.imwrite("images/" + str(frame_number) + ".jpg", frame) # 截取并保存1帧
💥💥1.2 实现步骤
本实例的操作对象是视频文件。首先,使用VideoCapture类的构造方法打开视频文件。然后,读取视频帧。接着,按每隔100帧截取视频帧,并将截取到的视频帧保存在images文件夹下。最后,释放被视频文件占用的空间。🌱
实现步骤流程图如下所示:
💥💥1.3 实现代码
具体的实现代码如下所示:
import cv2video = cv2.VideoCapture("1.mp4") # 打开视频文件
frame_number = 1 # 记录读取到的帧数,初始值为1
frame_interval = 100 # 每隔100帧(截取1帧)
while (video.isOpened()): # 视频文件被打开后retval, frame = video.read() # 读取视频帧if retval == True: # 读取到视频帧后if (frame_number % frame_interval == 0): # 每隔100帧cv2.imwrite("images/" + str(frame_number) + ".jpg", frame) # 截取并保存1帧else: # 没有读取到视频帧break # 终止循环frame_number = frame_number + 1 # 读取到的视频帧执行自加操作cv2.waitKey(1) # 1毫秒后播放视频文件的下一帧
print("视频帧已截取完成!") # 控制台输出提示信息
video.release() # 释放被视频文件占用的空间
运行结果如图所示:
由于我准备的视频文件很小,所以按照每100帧截取1帧,只截取到2帧。✅
实例2:视频是由大量的帧组成的。其中,每一帧都是一幅图像。所谓视频分解,就是把组成视频的每一帧从视频文件中分解出来。本实例将使用OpenCV分解一个视频文件,把分解得到的视频帧保存在项目目录images文件夹下。
🚀2.截取视频中所有的帧
💥💥2.1 核心技术
本实例要分解的是视频文件,从中得到每一个视频帧,并且将这些视频帧保存在images文件夹下。其中,在保存视频帧之前,要先命名将要被保存的视频帧。🌴
关键代码如下所示:
frame_name = 1 # 使用数字命名将要被保存的帧
具备了这个标签后,再来编写“将这些视频帧保存在images文件夹下”的代码。需要注意的是,在拼接保存视频帧路径之前,要先把frame_name由整数转为字符串。
关键代码如下所示:
cv2.imwrite("images/" + str(frame_name) + ".jpg", frame) # 保存视频帧
💥💥2.2 实现步骤
首先,使用VideoCapture类的构造方法打开视频文件。然后,读取视频帧。接着,把读取到的视频帧保存在images文件夹下。最后,释放被视频文件占用的空间。
实现步骤流程图如下所示:
💥💥2.3 实现代码
具体的实现代码如下所示:
import cv2video = cv2.VideoCapture("1.mp4") # 打开视频文件
frame_name = 1 # 使用数字命名将要被保存的帧
while (video.isOpened()): # 视频文件被打开后retval, frame = video.read() # 读取视频帧if retval == True: # 读取到视频帧后cv2.imwrite("images/" + str(frame_name) + ".jpg", frame) # 保存视频帧else: # 没有读取到视频帧break # 终止循环frame_name = frame_name + 1 # 用于命名将要被保存的帧的数字执行自加操作cv2.waitKey(1) # 1毫秒后播放视频文件的下一帧
print("视频已分解完成!") # 控制台输出提示信息
video.release() # 释放被视频文件占用的空间
运行结果如图所示:
相关文章:

OpenCV项目实战(1)— 如何去截取视频中的帧
前言:Hello大家好,我是小哥谈。针对一段视频,如何去截取视频中的帧呢?本节课就给大家介绍两种方式,一种方式是按一定间隔来截取视频帧,另一种方式是截取视频的所有帧。希望大家学习之后能够有所收获&#x…...
「程序员必须掌握的算法」动态规划「上篇」
动态规划详解 动态规划 (Dynamic Programming) 是一种算法思想,用于解决一些复杂的问题。本文将介绍动态规划的分类、概念和经典例题讲解。 动态规划的分类 动态规划可以分为以下两种类型: 0/1背包问题:该问题是动态规划的一种基本类型。…...

什么是Linux
什么是Linux? 不知道大家是什么时候开始接触Linux,我记得我是大三的时候,那时候通过国嵌、韦东山的教学视频,跟着搭bootloader,修改内核,制作根文件系统,一步步,视频真的很简单&…...

学习笔记|定时器|STC中断|定时器时间计算|STC32G单片机视频开发教程(冲哥)|第十一集:定时器的作用和意义
文章目录 1.定时器的作用和意义定时器中断定时器是定时器和计数器的统称。 2.STC32G单片机定时器使用原理2.1 先设置功能为定时器/计数器(本质都是加法计数器)2.2、在定时器模式下,设置不分频或者12分频∶Tips:选择不分频还是12分频2.3、定时器的工作模式…...
第28节-PhotoShop基础课程-图层操作
文章目录 前言1.像素图层2.删除 Delete3.合并 Ctrl E4.盖印 Ctrl Shift Alt5.图层顺序-拖动就可以6.编组-Ctrl G 管理图层-分类存放7.锁定图层-背景图层8.不透明度9.查找图层 2.智能图层1.能保持图片放大缩小(Ctrl T)的时候不丢失分辨率2.和滤镜配合使…...
CGAL 闵可夫斯基和(Minkowski Sums)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 假设给定两个集合 A , B ∈ R d A,B∈R^d A,B...

Layui快速入门之第二节布局容器(固定宽度与完整宽度)
目录 一:固定宽度 二: 完整宽度 一:固定宽度 将栅格放入一个带有 class"layui-container" 的特定容器中,以便在小屏幕以上的设备中固定宽度,让列可控(两侧有留白效果) <!--固定宽度(两侧有留白效果)--&…...
异地容灾系统和数据仓库中数据同步的设计软件的功能模型
( 1)初始同步模块 该模块主要是在表进行初始同步时使用的;它能够根据实际需要生成物化视图 及其索引的创建语句,并完成表的初始同步。如果没有特别的要求,则调用普通初 始同步子模块进行目的端表的初始同步ÿ…...

分布式调度 Elastic-job
分布式调度 Elastic-job 1.概述 1.1什么是任务调度 我们可以思考一下下面业务场景的解决方案: 某电商平台需要每天上午10点,下午3点,晚上8点发放一批优惠券某银行系统需要在信用卡到期还款日的前三天进行短信提醒某财务系统需要在每天凌晨0:10分结算…...

第 2 章 线性表(学生健康登记表实现)
1. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE 0 /* 返回值为假 */ #define RET_OK 0 /* 返回值正确 */ #define INFEASI…...
第三周晨考自测(3.0)
1.获取元素的偏移量 offsetLeft和offsetTop 分别获取的是元素元素左边的偏移量和上边的偏移量 语法:元素对象.offsetLeft /元素对象.offsetTop 返回值:就是该元素对应的偏移量,是一个具体的数字 offsetLeft:该元素相对于参考…...

C++ 结构体
前文 C中的结构体是一种非常有用的数据类型,它允许我们将不同的变量组合在一起,形成一个自定义的数据结构。 结构体在C中的应用非常广泛,它可以用来表示和管理各种实体、对象或数据的属性。比如,在一个学生管理系统中,…...

如何使用聊天GPT自定义说明
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 OpenAI ChatGPT正在席卷全球。一周又一周,更新不断提高您可以使用这种最先进的语言模型做什么的标准。 在这里,我们深入研究了OpenAI最近在ChatGPT自定义指令上发布的公告。此功能最初以测试版…...

mac pyenv无法切换python版本问题
看是zsh还是bash echo $SHELLzsh 配置到~/.zshrc 文件 vim ~/.zshrcexport PYENV_ROOT"$HOME/.pyenv" command -v pyenv >/dev/null || export PATH"$PYENV_ROOT/bin:$PATH" 执行 source ~/.zshrc bash vim ~/.bashrc export PYENV_R…...
API接口接入电商平台案例,采集淘宝天猫拼多多1688京东LAZADA数据按关键字搜索商品示例
按关键字搜索商品数据API接口可以让用户轻松地在海量商品中找到自己需要的商品。这个接口包括多种搜索方式,例如利用关键字搜索商品名称、商品描述、商品分类、商家信息等。同时,还可以通过不同的排序方式进行筛选,例如销量排行、价格排行、评…...

持安-大连万达集团零信任项目入选中国信通院2023零信任优秀案例
2023年8月25日,以“链接云端,可信而安”为主题的“2023首届SecGo云和软件安全大会”在京隆重召开。会上,中国信息通信研究院重磅揭晓了“安全守卫者计划”优秀案例评选结果。 零信任办公安全技术创新企业持安科技,与用户大连万达…...

python28种极坐标绘图函数总结
文章目录 基础图误差线等高线polar场图polar统计图非结构坐标图 📊python35种绘图函数总结,3D、统计、流场,实用性拉满 matplotlib中的画图函数,大部分情况下只要声明坐标映射是polar,就都可以画出对应的极坐标图。但…...

C#编程基础(万字详解,这一篇就够了)
C#及其开发环境简介 C#概述 C#的编程功能 C#与.Net的关系 .Net C# C#的集成开发环境 Windows上编写C#程序 Linux/Mac OS上编写C#程序 运行第一个HelloWorld程序 C#基本语法 程序实例 C#基本语法 using关键字 class关键字 注释 成员变量 成员函数 实例化一个类…...
SpringBoot中自定义注解
目录 SpringBoot中自定义注解 关于注解的解释 元注解 Documented Target Retention Inherited Native 自定义注解 自定义注解与SpringBoot全局异常处理完成参数校验 约束验证器 自定义全局异常处理器 自定义注解完成数据脱敏 定义脱敏策略枚举 自定义注解 实行脱…...

《TCP/IP网络编程》阅读笔记--地址族和数据序列
目录 1--IP地址和端口号 2--地址信息的表示 3--网络字节序与地址变换 4--网络地址的初始化与分配 5--Windows部分代码案例 1--IP地址和端口号 IP 地址分为两类: ① IPv4 表示 4 字节地址族; ② IPv6 表示 16 字节地址族; IPv4 标准的 4 …...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...