OpenCV自学笔记二十一:视频处理

2023-09-21 20:33:17

一、VideoCapture类

在OpenCV中,`VideoCapture`类提供了一系列函数来读取和控制视频流。以下是一些常用的`VideoCapture`类函数说明:

1. `isOpened()`:检查视频是否成功打开。返回一个布尔值,True表示成功打开,False表示未成功打开。

2. `open(filename or device)`:打开视频文件或设备(如摄像头)。参数可以是视频文件名,也可以是摄像头设备索引(通常为0)。函数返回一个布尔值,True表示成功打开,False表示未成功打开。

3. `read()`:逐帧读取视频。它返回一个布尔值(ret)和一个帧(frame)。ret表示是否成功读取到帧,frame是一个包含帧数据的numpy数组。

4. `release()`:释放`VideoCapture`对象所占用的资源。

5. `get(propId)`:获取视频流的属性值。propId是一个整数,表示具体的属性类型,例如宽度、高度、帧率等。函数返回属性值。

6. `set(propId, value)`:设置视频流的属性值。propId是一个整数,表示具体的属性类型,value是要设置的属性值。

7. `getBackendName()`:获取当前使用的视频捕获后端的名称。

这些函数提供了对视频流的基本操作和控制,使我们能够读取视频、访问视频的帧、获取和设置属性等。此外,还有其他一些函数可用于更高级的视频处理任务,例如跳转到指定帧、设置回调函数等。

二、VideoWrite类

1. VideoWriter类简介:

VideoWriter类用于创建和写入视频文件。

2. VideoWriter类的构造函数:

`cv2.VideoWriter(filename, fourcc, fps, frameSize[, isColor])`

- filename: 视频文件保存路径及名称。

- fourcc: 视频编码器的四字符代码,决定了视频的编码格式。例如`cv2.VideoWriter_fourcc('X','V','I','D')`表示使用XVID编码器。

- fps: 指定视频的帧率。

- frameSize: 视频帧的尺寸。

- isColor(可选参数): 是否为彩色视频,默认为True。

3. VideoWriter类的成员函数:

- `write(frame)`: 将一帧图像写入视频文件。

- `release()`: 释放资源,关闭视频文件。

下面是一个示例代码,演示如何使用VideoWriter类来保存视频文件:

​
import cv2

# 配置相关参数

filename = 'output.avi'

fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')

fps = 30.0

frameSize = (640, 480)

# 创建VideoWriter对象

out = cv2.VideoWriter(filename, fourcc, fps, frameSize)

# 打开摄像头

cap = cv2.VideoCapture(0)

while True:

# 读取当前帧

ret, frame = cap.read()

# 如果成功读取帧

if ret:

# 显示当前帧

cv2.imshow('Frame', frame)

# 写入视频文件

out.write(frame)

# 按下 'q' 键退出循环

if cv2.waitKey(1) & 0xFF == ord('q'):

break

else:

break

# 释放资源

cap.release()

out.release()

# 关闭窗口

cv2.destroyAllWindows()

​

以上示例代码会从摄像头获取视频帧,并实时显示在窗口中。同时,它会将每一帧写入名为`output.avi`的视频文件中。按下 'q' 键即可退出程序。

更多推荐

【C++】泛型算法(六)Map和Set的使用

Mapmap<key,value>key起到索引的作用。//常见使用:字数统计程序#include<map>#include<string>map<string,int>words;//string是key,int是valuestringtword;while(cin>>tword){words[tword]++;//

解释器风格架构C# 代码

/*解释器风格架构是一种基于组件的设计架构,它将应用程序分解为一系列组件,每个组件负责处理特定的任务。这种架构有助于提高代码的可维护性和可扩展性。以下是如何使用C#实现解释器风格架构的步骤:定义组件:首先,定义一个组件接口,这将是所有组件需要遵循的规范。这包括组件的基本操作,如添加、删除、查询等。*/voidMain(

c#设计模式-结构型模式 之适配器模式

🚀介绍将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。适配器模式(Adapter)包含以下主要角色:目标(Target)接口

算力和LAXCUS分布式操作系统

有用户问LAXCUS分布式操作系统和算力的关系,今天借这个话题讲讲二者的关联。算力是指计算机系统在单位时间内所能完成的计算任务数量。随着计算机技术的发展,尤其是大数据、云计算、人工智能等新技术、新应用业务的出现,算力已经成为了衡量计算系统和产业业态的重要指标。在传统的集中式计算模式下,算力的提升主要依赖于硬件设备的升级

C语言每日一题(1):实现库函数strlen()

文章主题:库函数strlen()的实现所属专栏:C语言每日一题作者简介:每天不定时更新C语言的小白一枚,记录分享自己每日的所思所想。个人主页:[₽]的个人主页目录前言函数介绍编程起因设计思路1.整体逻辑2.参数类型3.防止空指针4.返回值代码展示结语前言函数介绍strlen()函数是我们在C语言编程中常用到库函数。在C

【LeetCode-中等题】 222. 完全二叉树的节点个数

文章目录题目方法一:把该题当做一个普通的二叉树来做(任何遍历都可以)方法二:利用完全二叉树的性质来做题目方法一:把该题当做一个普通的二叉树来做(任何遍历都可以)例如:二叉树的前序遍历(维护一个全局变量)递归无返回值classSolution{intnum=0;publicintcountNodes(TreeNodero

Docker快速入门到项目部署,MySQL部署+Nginx部署

《Docker》是微服务在企业落地的最后一块拼图。微服务项目由于拆分粒度细,服务部署环境复杂,部署实例很多,维护困难。而Docker则可以解决项目部署的各种环境问题,让开发、运维一体化,真正实现持续集成、持续部署。大大提高企业项目开发到部署的效率。同学们,在前两天我们学习了Linux操作系统的常见命令以及如何在Linu

数据结构之堆的结构与实现

目录一、堆的概念及结构1.1堆的概念1.2堆的性质1.3堆的结构二、堆的实现2.1堆向下调整算法(父亲与孩子做比较)2.2堆的向上调整算法(孩子与父亲做比较)2.3堆的创建(向下建堆)2.4向下建堆的时间复杂度2.5堆的插入2.6堆的删除2.7堆的完整代码实现三、堆的应用3.1堆排序3.2TOP-K问题一、堆的概念及结

如何提取视频中的音频转为mp3

如何提取视频中的音频转为mp3?在丰富多样的视频作品中,我们常常会遇到一些引人入胜的对话和有趣的音乐变奏。不少朋友可能曾经看过那种画面与其他作品声音巧妙搭配,给人带来无比愉悦和和谐感的趣味作品。然而,很多人虽然有着相似的创作灵感,却苦于不知道如何提取所需素材。这时候我们应该寻找方法,将视频中对我们有用的音频提取处理并保

【c语言】贪吃蛇

当我们不想学习新知识的时候,并且特别无聊,就会突然先看看别人怎么写游戏的,今天给大家分享的是贪吃蛇,所需要的知识有结构体,枚举,以及easy-x图形库的一些基本函数就完全够用了,本来我想插入游戏的音乐,但是没找到贪吃蛇的背景音乐,所以就没加,大家可以参考我之前的博文里面有如何加音乐的教程包含的头文件#include<s

大二毕设.3-网盘系统

目录技术选型:功能概括:基本演示:实现讲解:技术选型:前端:Vue3+ElementPlus后端:SpringBoot+Mybatis-Plus+MySQL+Redis+Caffeine+FastDFS/OSS+SpringCloudStream+RocketMQ+Zookeeper功能概括:用户模块用户注册接口幂等性

热文推荐