OpenCV-Python学习(22)—— OpenCV 视频读取与保存处理(cv.VideoCapture、cv.VideoWriter)
1. 学习目标
- 学习 OpenCV 的视频的编码格式 cv.VideoWriter_fourcc;
- 学会使用 OpenCV 的视频读取函数 cv.VideoCapture;
- 学会使用 OpenCV 的视频保存函数 cv.VideoWriter。
2. cv.VideoWriter_fourcc()常见的编码参数
2.1 参数说明
| 参数 | 说明 |
|---|---|
| cv.VideoWriter_fourcc(‘M’,‘P’,‘4’,‘V’) | MPEG-4编码 .mp4 可指定结果视频的大小 |
| cv.VideoWriter_fourcc(‘X’,‘2’,‘6’,‘4’) | MPEG-4编码 .mp4 可指定结果视频的大小 |
| cv.VideoWriter_fourcc(‘I’, ‘4’, ‘2’, ‘0’) | 该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件 |
| cv.VideoWriter_fourcc(‘P’, ‘I’, ‘M’, ‘I’) | 该参数是MPEG-1编码类型,文件名后缀为.avi |
| cv.VideoWriter_fourcc(‘X’, ‘V’, ‘I’, ‘D’) | 该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小 |
| cv.VideoWriter_fourcc(‘T’, ‘H’, ‘E’, ‘O’) | 该参数是Ogg Vorbis,文件名后缀为.ogv |
| cv.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘1’) | 该参数是Flash视频,文件名后缀为.flv |
2.2 使用
- 以写mp4视频为例,以下为等价写法:
fourcc = cv.VideoWriter_fourcc('m', 'p', '4', 'v')
fourcc = cv.VideoWriter_fourcc('M', 'P', '4', 'V')
fourcc = cv.VideoWriter_fourcc(*'MP4V')
fourcc = cv.VideoWriter_fourcc(*'mp4v')
3. 视频读取
3.1 cv.VideoCapture() 函数说明
cv.VideoCapture(filename[, apiPreference[, params]]) → <VideoCapture object>cv.VideoCapture(index[, apiPreference[, params]]) → <VideoCapture object>
3.2 参数说明
| 参数 | 说明 |
|---|---|
| filename | 表示读取的视频文件的路径,包括扩展名。 |
| index | 表示摄像头的 ID 编号,0 表示默认后端打开默认摄像机。 |
| apiPreference | 表示决定使用那个第三方库读取视频。 |
4. 视频保存
4.1 cv.VideoWriter() 函数说明
cv.VideoWriter(filename, fourcc, fps, frameSize[, isColor]) → <VideoWriter object>
4.2 参数说明
| 参数 | 说明 |
|---|---|
| filename | 表示保存的视频文件的路径,包括扩展名。 |
| fourcc | 表示用于压缩帧的编码器/解码器的字符代码。 |
| fps | 表示视频流的帧速率。 |
| frameSize | 表示元组 (w, h),视频帧的宽度和高度。 |
| isColor | 表示是否彩色图像。 |
5. cv.VideoCapture 和 cv.VideoWriter 的成员函数
| 函数名 | 说明 |
|---|---|
| cv.VideoCapture.isOpened() | 表示检查视频捕获是否初始化成功。 |
| cv.VideoCapture.read() | 表示捕获视频文件、视频流或捕获的视频设备。 |
| cv.VideoCapture.get(propId) | 表示获取 VideoCapture 类对象的属性。 |
| cv.VideoCapture.set(propId, value) | 表示设置 VideoCapture 类对象的属性。 |
| cv.VideoCapture.release() | 表示关闭视频文件或设备,释放对象。 |
| cv.VideoWriter.fourcc(c1, c2, c3, c4[, ]) | 表示构造编码器/解码器的fourcc代码。 |
| cv.VideoWriter.write(image[, ]) | 表示写入下一帧视频。 |
| cv.VideoWriter.release() | 表示关闭视频写入,释放对象。 |
6. 实例将 .avi 转 .mp4
6.1 实例代码
import cv2 as cv
import imageio# 读取视频,将视频按照帧导出图片
def get_video_images(video_path):cap = cv.VideoCapture(video_path)images = []while cap.isOpened():ret, frame = cap.read() # 读取下一帧视频图像if ret is True:cv.imshow("frame", frame)images.append(frame)key = cv.waitKey(24)if key == ord('q'):breakelse:breakcap.release()cv.destroyAllWindows()return images# 转MP4
def create_mp4(filename, fps, images):h,w,c = images[0].shapefourcc = cv.VideoWriter_fourcc(*'mp4v')writer = cv.VideoWriter(filename, fourcc, fps, (w,h))for frame in images:writer.write(frame)writer.release()if __name__ == "__main__":imgs = get_video_images('./images/Megamind.avi')create_mp4('./images/Megamind.mp4', 24, imgs)
6.2 转换结果使用 gif 展示

7. 总结
- 视频写入类VideoWriter的参数frameSize是元组 (w, h),即视频帧的宽度和高度,而OpenCV图像的形状是 (h, w),注意二者的顺序相反;
- write 写入图片的宽高必须保持一直;
- 使用摄像头时,index=0 表示默认后端打开默认摄像机,例如笔记本内置摄像头。
相关文章:
OpenCV-Python学习(22)—— OpenCV 视频读取与保存处理(cv.VideoCapture、cv.VideoWriter)
1. 学习目标 学习 OpenCV 的视频的编码格式 cv.VideoWriter_fourcc;学会使用 OpenCV 的视频读取函数 cv.VideoCapture;学会使用 OpenCV 的视频保存函数 cv.VideoWriter。 2. cv.VideoWriter_fourcc()常见的编码参数 2.1 参数说明 参数说明cv.VideoWr…...
2023-03-05力扣每日一题
链接: https://leetcode.cn/problems/triples-with-bitwise-and-equal-to-zero/ 题意: 模拟一个摩天轮,四个舱,每个舱最多四人,给一个数组,表示摩天轮每切换一次座舱会来多少人排队(人不会走…...
真正的IT技术男是什么样的?
我们经常会听到很多对IT男士的调侃称呼,“屌丝”、“宅男”,会逗的大家捧腹大笑。但是,大家要不要以为称呼IT男是“屌丝”、“宅男”,就当真以为他们是这样了。今天,青鸟学姐就带大家一起来了解一下,真正的…...
在函数中,用指针接收就可以改变相应的内容吗??
作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 我们在不管指针那篇博客,还是在函数那篇博客中,我都给大家讲解过…...
Java+ElasticSearch+Pytorch实现以图搜图
以图搜图,涉及两大功能:1、提取图像特征向量。2、相似向量检索。第一个功能我通过编写pytorch模型并在java端借助djl调用实现,第二个功能通过elasticsearch7.6.2的dense_vector、cosineSimilarity实现。一、准备模型创建demo.py,输…...
【C语言学习笔记】:指针
指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内…...
微信小程序搭建流程
一、申请微信开发者账号虽然开发微信小程序可以使用工具提供的测试号,但是测试号提供的功能极为有限,而且使用测试号开发的微信小程序不能上架发布。因此说我们想要开发一个可以上架的微信小程序,首先必须要申请微信开发者账号。大家尽可放心…...
嵌入式 Linux进程间的通信--信号
目录 信号 信号的概述 信号类型 信号发送 1、kill 函数 2、raise函数 3、pause函数 信号处理 可以结合上一篇文章一起看: 嵌入式 Linux进程之间的通信_丘比特惩罚陆的博客-CSDN博客 信号 信号的概述 软中断信号(signal,又简称为…...
Vue3 核心模块源码解析(中)
【Vue3 核心模块源码解析(上)】讲到了 Vue2 与 Vue3的一些区别,Vue3 新特性的使用,以及略微带了一点源码。那么这篇文章就要从Vue3 模块源码解析 与 Vue3 执行逻辑解析这两个方面去给大家剖析 Vue3 的深层次,一起学习起来吧! 这里…...
华为OD机试题 - 剩余可用字符集(JavaScript)| 含思路
华为OD机试题 最近更新的博客使用说明本篇题解:剩余可用字符集题目输入输出示例一输入输出说明Code解题思路华为OD其它语言版本最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全…...
焦虑的根源
归结起来,焦虑的原因就两条:想同时做很多事,又想立即看到效果。王小波说:人的一切痛苦,本质上都是对自己无能的愤怒。焦虑的本质也契合这一观点:自己的欲望大于能力,又极度缺乏耐心。焦虑就是因为欲望与能力之间差距过大。再往深了…...
1.认识网络爬虫
1.认识网络爬虫网络爬虫爬虫的合法性HTTP协议请求与响应(重点)网络爬虫 爬虫的全名叫网络爬虫,简称爬虫。他还有其他的名字,比如网络机器人,网络蜘蛛等等。爬虫就好像一个探测机器,它的基本操作就是模拟人的行为去各个网站溜达&am…...
【论文速递】WACV 2023 - 一种全卷积Transformer的医学影响分割模型
【论文速递】WACV 2023 - 一种全卷积Transformer的医学影响分割模型 【论文原文】:The Fully Convolutional Transformer for Medical Image Segmentation 【作者信息】:Athanasios Tragakis, Chaitanya Kaul,Roderick Murray-Smith,Dirk Husmeier 论…...
加密图像的脆弱水印及应用
原文题目:《A self-embedding secure fragile watermarking scheme with high quality recovery》 学习笔记: 应用场景 为了确保图像在传输过程中不被损坏,在将原始图像发送到云端之前,将用于篡改检测和恢复的水印嵌入到原始图像…...
python线上商城网站项目前台和后台源码
wx供重浩:创享日记 对话框发送:python51 获取完整源码源文件说明文档配置教程等 1、网站前台 在虚拟环境中启动程序后,使用浏览器访问“http://127.0.0.1:5000”即可进入网站前台首页。如图1所示。 单击首页左上角“注册”按钮,进…...
PowerShell 实现企业微信机器人推送消息
前言企业微信机器人 在ARMS告警管理中创建企业微信机器人后,您可以在通知策略中指定对应的企业微信群用于接收告警。当通知策略的匹配规则被触发时,系统会自动向您指定的企业微信群发送告警通知。企业微信群收到通知后,您可以在企业微信群中…...
IDEA集成Git就是这么简单
IDEA集成Git 文章目录IDEA集成Git配置Git环境配置Git的忽略文件①为什么需要配置忽略文件?②配置忽略文件③引用配置文件配置IDEA初始化项目添加到暂存区方式一:方式二:移除暂存区提交到本地库分支创建分支切换分支版本穿梭配置Git环境 配置…...
springBoot 事务基本原理
springBoot事务基本原理是基于spring的BeanPostProcessor,在springBoot中事务使用方式为: 一、在启动类上添加注解:EnableTransactionManagement 二、在需要事务的接口上添加注解:Transactional 基本原理: 注解&am…...
HBuilderX无线连接真机
说明 安装的是HBuilderX,不是HBuilder,adb.exe所在目录是 x:\HBuilderX\plugins\launcher\tools\adbs\ 里面可能有其他版本,用哪个都,建议使用最新的 配置 首先,将真机使用USB连接到电脑上。 在adb目录中启动命令…...
idea初学笔记
注:初学需安装idea专业版,方便学习使用idea运行内存配置从eclipse工具开发 转 idea工具开发,可设置idea快捷键同eclipse快捷键 file -> Settings -> Keymap -> 选择Eclipse -> OK设置idea项目整体编码格式file -> Settings -> Editor …...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
