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

OpenCV-Python学习(22)—— OpenCV 视频读取与保存处理(cv.VideoCapture、cv.VideoWriter)

1. 学习目标

  1. 学习 OpenCV 的视频的编码格式 cv.VideoWriter_fourcc;
  2. 学会使用 OpenCV 的视频读取函数 cv.VideoCapture;
  3. 学会使用 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 使用

  1. 以写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. 总结

  1. 视频写入类VideoWriter的参数frameSize是元组 (w, h),即视频帧的宽度和高度,而OpenCV图像的形状是 (h, w),注意二者的顺序相反;
  2. write 写入图片的宽高必须保持一直;
  3. 使用摄像头时,index=0 表示默认后端打开默认摄像机,例如笔记本内置摄像头。

相关文章:

OpenCV-Python学习(22)—— OpenCV 视频读取与保存处理(cv.VideoCapture、cv.VideoWriter)

1. 学习目标 学习 OpenCV 的视频的编码格式 cv.VideoWriter_fourcc&#xff1b;学会使用 OpenCV 的视频读取函数 cv.VideoCapture&#xff1b;学会使用 OpenCV 的视频保存函数 cv.VideoWriter。 2. cv.VideoWriter_fourcc()常见的编码参数 2.1 参数说明 参数说明cv.VideoWr…...

2023-03-05力扣每日一题

链接&#xff1a; https://leetcode.cn/problems/triples-with-bitwise-and-equal-to-zero/ 题意&#xff1a; 模拟一个摩天轮&#xff0c;四个舱&#xff0c;每个舱最多四人&#xff0c;给一个数组&#xff0c;表示摩天轮每切换一次座舱会来多少人排队&#xff08;人不会走…...

真正的IT技术男是什么样的?

我们经常会听到很多对IT男士的调侃称呼&#xff0c;“屌丝”、“宅男”&#xff0c;会逗的大家捧腹大笑。但是&#xff0c;大家要不要以为称呼IT男是“屌丝”、“宅男”&#xff0c;就当真以为他们是这样了。今天&#xff0c;青鸟学姐就带大家一起来了解一下&#xff0c;真正的…...

在函数中,用指针接收就可以改变相应的内容吗??

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; 我们在不管指针那篇博客&#xff0c;还是在函数那篇博客中&#xff0c;我都给大家讲解过…...

Java+ElasticSearch+Pytorch实现以图搜图

以图搜图&#xff0c;涉及两大功能&#xff1a;1、提取图像特征向量。2、相似向量检索。第一个功能我通过编写pytorch模型并在java端借助djl调用实现&#xff0c;第二个功能通过elasticsearch7.6.2的dense_vector、cosineSimilarity实现。一、准备模型创建demo.py&#xff0c;输…...

【C语言学习笔记】:指针

指针的概念 指针是一个特殊的变量&#xff0c;它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容&#xff1a;指针的类型&#xff0c;指针所指向的类型&#xff0c;指针的值或者叫指针所指向的内存区&#xff0c;还有指针本身所占据的内…...

微信小程序搭建流程

一、申请微信开发者账号虽然开发微信小程序可以使用工具提供的测试号&#xff0c;但是测试号提供的功能极为有限&#xff0c;而且使用测试号开发的微信小程序不能上架发布。因此说我们想要开发一个可以上架的微信小程序&#xff0c;首先必须要申请微信开发者账号。大家尽可放心…...

嵌入式 Linux进程间的通信--信号

目录 信号 信号的概述 信号类型 信号发送 1、kill 函数 2、raise函数 3、pause函数 信号处理 可以结合上一篇文章一起看&#xff1a; 嵌入式 Linux进程之间的通信_丘比特惩罚陆的博客-CSDN博客 信号 信号的概述 软中断信号&#xff08;signal&#xff0c;又简称为…...

Vue3 核心模块源码解析(中)

【Vue3 核心模块源码解析(上)】讲到了 Vue2 与 Vue3的一些区别&#xff0c;Vue3 新特性的使用&#xff0c;以及略微带了一点源码。那么这篇文章就要从Vue3 模块源码解析 与 Vue3 执行逻辑解析这两个方面去给大家剖析 Vue3 的深层次&#xff0c;一起学习起来吧&#xff01; 这里…...

华为OD机试题 - 剩余可用字符集(JavaScript)| 含思路

华为OD机试题 最近更新的博客使用说明本篇题解:剩余可用字符集题目输入输出示例一输入输出说明Code解题思路华为OD其它语言版本最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全…...

焦虑的根源

归结起来&#xff0c;焦虑的原因就两条:想同时做很多事&#xff0c;又想立即看到效果。王小波说:人的一切痛苦&#xff0c;本质上都是对自己无能的愤怒。焦虑的本质也契合这一观点:自己的欲望大于能力&#xff0c;又极度缺乏耐心。焦虑就是因为欲望与能力之间差距过大。再往深了…...

1.认识网络爬虫

1.认识网络爬虫网络爬虫爬虫的合法性HTTP协议请求与响应(重点)网络爬虫 爬虫的全名叫网络爬虫&#xff0c;简称爬虫。他还有其他的名字&#xff0c;比如网络机器人&#xff0c;网络蜘蛛等等。爬虫就好像一个探测机器&#xff0c;它的基本操作就是模拟人的行为去各个网站溜达&am…...

【论文速递】WACV 2023 - 一种全卷积Transformer的医学影响分割模型

【论文速递】WACV 2023 - 一种全卷积Transformer的医学影响分割模型 【论文原文】&#xff1a;The Fully Convolutional Transformer for Medical Image Segmentation 【作者信息】&#xff1a;Athanasios Tragakis, Chaitanya Kaul,Roderick Murray-Smith,Dirk Husmeier 论…...

加密图像的脆弱水印及应用

原文题目&#xff1a;《A self-embedding secure fragile watermarking scheme with high quality recovery》 学习笔记&#xff1a; 应用场景 为了确保图像在传输过程中不被损坏&#xff0c;在将原始图像发送到云端之前&#xff0c;将用于篡改检测和恢复的水印嵌入到原始图像…...

python线上商城网站项目前台和后台源码

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;python51 获取完整源码源文件说明文档配置教程等 1、网站前台 在虚拟环境中启动程序后&#xff0c;使用浏览器访问“http://127.0.0.1:5000”即可进入网站前台首页。如图1所示。 单击首页左上角“注册”按钮&#xff0c;进…...

PowerShell 实现企业微信机器人推送消息

前言企业微信机器人 在ARMS告警管理中创建企业微信机器人后&#xff0c;您可以在通知策略中指定对应的企业微信群用于接收告警。当通知策略的匹配规则被触发时&#xff0c;系统会自动向您指定的企业微信群发送告警通知。企业微信群收到通知后&#xff0c;您可以在企业微信群中…...

IDEA集成Git就是这么简单

IDEA集成Git 文章目录IDEA集成Git配置Git环境配置Git的忽略文件①为什么需要配置忽略文件&#xff1f;②配置忽略文件③引用配置文件配置IDEA初始化项目添加到暂存区方式一&#xff1a;方式二&#xff1a;移除暂存区提交到本地库分支创建分支切换分支版本穿梭配置Git环境 配置…...

springBoot 事务基本原理

springBoot事务基本原理是基于spring的BeanPostProcessor&#xff0c;在springBoot中事务使用方式为&#xff1a; 一、在启动类上添加注解&#xff1a;EnableTransactionManagement 二、在需要事务的接口上添加注解&#xff1a;Transactional 基本原理&#xff1a; 注解&am…...

HBuilderX无线连接真机

说明 安装的是HBuilderX&#xff0c;不是HBuilder&#xff0c;adb.exe所在目录是 x:\HBuilderX\plugins\launcher\tools\adbs\ 里面可能有其他版本&#xff0c;用哪个都&#xff0c;建议使用最新的 配置 首先&#xff0c;将真机使用USB连接到电脑上。 在adb目录中启动命令…...

idea初学笔记

注:初学需安装idea专业版&#xff0c;方便学习使用idea运行内存配置从eclipse工具开发 转 idea工具开发&#xff0c;可设置idea快捷键同eclipse快捷键 file -> Settings -> Keymap -> 选择Eclipse -> OK设置idea项目整体编码格式file -> Settings -> Editor …...

如何快速配置Windows三指拖动功能:ThreeFingerDragOnWindows完整指南

如何快速配置Windows三指拖动功能&#xff1a;ThreeFingerDragOnWindows完整指南 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/Thre…...

星露谷物语SMAPI模组加载器:终极安装与使用完全指南

星露谷物语SMAPI模组加载器&#xff1a;终极安装与使用完全指南 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 想要为《星露谷物语》安装模组来扩展游戏体验吗&#xff1f;SMAPI模组加载器是官方推…...

ISO/SAE 21434:2021 逐条审核判定表

A 章节号&#xff5c;B 条款&#xff5c;C 要求内容&#xff5c;D 符合性&#xff5c;E 证据 / 说明&#xff5c;F&#xff1a;不符合整改项符合性选项&#xff1a;符合 / 部分符合 / 不符合 / 不适用章节号条款审核要求内容符合性证据 / 备注整改项44.1建立网络安全生命周…...

ESP32组件化开发实战:从零构建高效项目结构

1. 为什么需要组件化开发&#xff1f; 第一次接触ESP32开发时&#xff0c;我习惯把所有代码都塞进main文件夹里。结果项目稍微复杂点就乱成一锅粥&#xff0c;每次修改都要在几十个文件里翻找&#xff0c;不同功能模块互相纠缠&#xff0c;想复用某个传感器驱动都得连带着拷贝…...

BiliBiliCCSubtitle:高效解决B站字幕处理难题全攻略

BiliBiliCCSubtitle&#xff1a;高效解决B站字幕处理难题全攻略 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 一、问题篇&#xff1a;字幕处理的真实困境与技术…...

3步轻松延长Navicat使用周期:Mac用户实用指南

3步轻松延长Navicat使用周期&#xff1a;Mac用户实用指南 【免费下载链接】navicat_reset_mac navicat16 mac版无限重置试用期脚本 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navicat试用期到期烦恼吗&#xff1f;作为数据库管理的得力工具…...

遗传算法(GA)调参实战:以Scikit-learn模型为例,手把手教你自动化超参数搜索

遗传算法调参实战&#xff1a;用进化思维优化Scikit-learn模型超参数 当我们在机器学习项目中反复调整随机森林的max_depth或XGBoost的learning_rate时&#xff0c;是否想过自然界早已提供了更优雅的解决方案&#xff1f;生物进化经过数十亿年锤炼的优化机制&#xff0c;正以遗…...

低代码组件“看似简单,上线即崩”?20年专家拆解5个被90%团队忽略的线程安全与事务传播陷阱

第一章&#xff1a;低代码组件“看似简单&#xff0c;上线即崩”的真相低代码平台承诺“拖拽即交付”&#xff0c;但真实生产环境中&#xff0c;大量业务系统在上线后数小时内便出现表单提交失败、数据丢失、权限错乱或页面白屏等问题。这些故障并非源于复杂逻辑&#xff0c;而…...

智能票务自动化工具:提升大型活动门票获取效率的全流程解决方案

智能票务自动化工具&#xff1a;提升大型活动门票获取效率的全流程解决方案 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 在数字化时代&#xff0c;大型展会、体育赛事等热…...

千问3.5-2B集成IDEA开发环境:Java大模型应用快速构建指南

千问3.5-2B集成IDEA开发环境&#xff1a;Java大模型应用快速构建指南 1. 为什么要在IDEA中集成大模型&#xff1f; 作为Java开发者&#xff0c;我们经常需要在项目中处理各种文本处理任务。传统方式要么需要调用外部API&#xff08;有网络延迟和费用问题&#xff09;&#xf…...