OpenCV基础:视频的采集、读取与录制

从摄像头采集视频

相关接口 - VideoCapture

VideoCapture 用于从视频文件、摄像头或其他视频流设备中读取视频帧。它可以捕捉来自多种源的视频。

主要参数:
cv2.VideoCapture(source):

source: 这是一个整数或字符串,表示视频的来源。

  • 如果是整数(如0、1等),表示打开对应的摄像头(0通常是默认摄像头)。
  • 如果是字符串,表示视频文件的路径,或者RTSP流、HTTP流等视频流地址。

常用方法:
cap.read():

  • 返回两个值:ret(布尔值,表示是否成功读取)和 frame(当前帧图像)。

cap.set(prop_id, value):

  • 设置视频捕获设备的属性。prop_id是属性标识符,value是设置的值。

常见的 prop_id 参数:

  • cv2.CAP_PROP_FPS:帧率(每秒帧数)。
  • cv2.CAP_PROP_FRAME_WIDTH:视频宽度。
  • cv2.CAP_PROP_FRAME_HEIGHT:视频高度。
  • cv2.CAP_PROP_BRIGHTNESS:亮度。
  • cv2.CAP_PROP_CONTRAST:对比度。

代码:

以下代码的作用是打开摄像头,将采集到的视频流显示到窗口中。

import cv2#创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)#获取视频设备
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()#将视频帧在窗口中显示cv2.imshow('video', frame)#等待键盘事件key = cv2.waitKey(1)if (key & 0xFF == ord('q')):break#释放 videocapture
cap.release()
cv2.destroyAllWindows()

 读取视频文件

只需要修改 VideoCapture 接口参数即可:

import cv2#创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)#读取视频文件
cap = cv2.VideoCapture('D:\\resource\\D026网络购物互联网科技.mov')while True:ret, frame = cap.read()#将视频帧在窗口中显示cv2.imshow('video', frame)#等待键盘事件key = cv2.waitKey(40)if (key & 0xFF == ord('q')):break#释放 videocapture
cap.release()
cv2.destroyAllWindows()

其中 waitKey 设置为40ms,由于当前播放的视频帧率是25fps,然后1000/25 = 40,于是将waitkey等待间隔设置为了40ms。 

运行后:

视频录制

相关接口 - videoWrite

VideoWriter 用于将视频帧写入视频文件。可以设置视频格式、编解码器、帧速率等。

主要参数:
cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
filename: 输出视频文件的路径或文件名。这个文件将存储捕捉到的视频。
fourcc: 编解码器代码(FourCC)。这指定了视频的编码格式。常见的 fourcc 编码器包括:

  • cv2.VideoWriter_fourcc(*'XVID'):XVID编码。
  • cv2.VideoWriter_fourcc(*'MJPG'):MJPEG编码。
  • cv2.VideoWriter_fourcc(*'MP4V'):MP4编码。
  • cv2.VideoWriter_fourcc(*'H264'):H.264编码。

fps: 帧率(每秒帧数)。例如,30 表示每秒30帧。
frameSize: 视频帧的尺寸,通常是一个元组 (width, height),如 (640, 480)。
isColor: 布尔值,指示是否保存为彩色视频。True 表示彩色视频(默认),False 表示灰度视频。


常用方法:
writer.write(frame): 将视频帧写入输出文件。
writer.release(): 释放视频写入对象,确保文件正确关闭。

代码:

以下代码的作用是从摄像头采集视频,显示到窗口中,同时保存到本地。

import cv2#创建VideoWriter
fourcc = cv2.VideoWriter_fourcc(*'XVID')
vw = cv2.VideoWriter('./out.mp4', fourcc, 20, (640, 480))#创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)#获取视频设备
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()#将视频帧在窗口中显示cv2.imshow('video', frame)#写数据到多媒体文件vw.write(frame)#等待键盘事件key = cv2.waitKey(1)if (key & 0xFF == ord('q')):break#释放 videocapture
cap.release()#释放VideoWriter
vw.release()cv2.destroyAllWindows()

查看输出视频属性:

代码优化:

  • 增加摄像头开启判断
  • 增加采集视频失败处理
import cv2#创建VideoWriter
fourcc = cv2.VideoWriter_fourcc(*'XVID')
vw = cv2.VideoWriter('./out.mp4', fourcc, 20, (640, 480))#创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)#获取视频设备
cap = cv2.VideoCapture(0)while cap.isOpened:ret, frame = cap.read()if ret == False :break;#将视频帧在窗口中显示cv2.imshow('video', frame)cv2.resizeWindow('video', 640, 480)#写数据到多媒体文件vw.write(frame)#等待键盘事件key = cv2.waitKey(1)if (key & 0xFF == ord('q')):break#释放 videocapture
cap.release()#释放VideoWriter
vw.release()cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解读Linux Bridge中的东西流向与南北流向

解读Linux Bridge中的东西流向与南北流向 在现代云计算和虚拟化环境中,网络流量的管理和优化变得越来越重要。Linux Bridge作为Linux内核提供的一个强大的二层交换机工具,在虚拟化和容器化应用中扮演着至关重要的角色。本文将深入探讨Linux Bridge中的两…

车联网安全--TLS握手过程详解

目录 1. TLS协议概述 2. 为什么要握手 2.1 Hello 2.2 协商 2.3 同意 3.总共握了几次手? 1. TLS协议概述 车内各ECU间基于CAN的安全通讯--SecOC,想必现目前多数通信工程师们都已经搞的差不多了(不要再问FvM了);…

RuoYi Cloud项目解读【四、项目配置与启动】

四、项目配置与启动 当上面环境全部准备好之后,接下来就是项目配置。需要将项目相关配置修改成当前相关环境。 1 后端配置 1.1 数据库 创建数据库ry-cloud并导入数据脚本ry_2024xxxx.sql(必须),quartz.sql(可选&…

第432场周赛:跳过交替单元格的之字形遍历、机器人可以获得的最大金币数、图的最大边权的最小值、统计 K 次操作以内得到非递减子数组的数目

Q1、跳过交替单元格的之字形遍历 1、题目描述 给你一个 m x n 的二维数组 grid,数组由 正整数 组成。 你的任务是以 之字形 遍历 grid,同时跳过每个 交替 的单元格。 之字形遍历的定义如下: 从左上角的单元格 (0, 0) 开始。在当前行中向…

Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能

Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能 基于SpringBoot3Vue3前后端分离的Java快速开发框架 项目简介:基于 JDK 17、Spring Boot 3、Spring Security 6、JWT、Redis、Mybatis-P…

R数据分析:多分类问题预测模型的ROC做法及解释

有同学做了个多分类的预测模型,结局有三个类别,做的模型包括多分类逻辑回归、随机森林和决策树,多分类逻辑回归是用ROC曲线并报告AUC作为模型评估的,后面两种模型报告了混淆矩阵,审稿人就提出要统一模型评估指标。那么肯定是统一成ROC了,刚好借这个机会给大家讲讲ROC在多…

记一次学习skynet中的C/Lua接口编程解析protobuf过程

1.引言 最近在学习skynet过程中发现在网络收发数据的过程中数据都是裸奔,就想加入一种数据序列化方式,json、xml简单好用,但我就是不想用,于是就想到了protobuf,对于protobuf C/C的使用个人感觉有点重,正好…

SQLAlchemy

https://docs.sqlalchemy.org.cn/en/20/orm/quickstart.htmlhttps://docs.sqlalchemy.org.cn/en/20/orm/quickstart.html 声明模型 在这里,我们定义模块级构造,这些构造将构成我们从数据库中查询的结构。这种结构被称为 声明式映射,它同时定…

Trimble自动化激光监测支持历史遗产实现可持续发展【沪敖3D】

故事桥(Story Bridge)位于澳大利亚布里斯班,建造于1940年,全长777米,横跨布里斯班河,可载汽车、自行车和行人往返于布里斯班的北部和南部郊区。故事桥是澳大利亚最长的悬臂桥,是全世界两座手工建…

Playwright vs Selenium:全面对比分析

在现代软件开发中,自动化测试工具在保证应用质量和加快开发周期方面发挥着至关重要的作用。Selenium 作为自动化测试领域的老牌工具,长期以来被广泛使用。而近年来,Playwright 作为新兴工具迅速崛起,吸引了众多开发者的关注。那么…

Windows 程序设计3:宽窄字节的区别及重要性

文章目录 前言一、宽窄字节简介二、操作系统及VS编译器对宽窄字节的编码支持1. 操作系统2. 编译器 三、宽窄字符串的优缺点四、宽窄字节数据类型总结 前言 Windows 程序设计3:宽窄字节的区别及重要性。 一、宽窄字节简介 在C中,常用的字符串指针就是ch…

进阶——十六届蓝桥杯嵌入式熟练度练习(LED的全开,全闭,点亮指定灯,交替闪烁,PWM控制LED呼吸灯)

点亮灯的函数 void led_show(unsigned char upled) { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOC,upled<<8,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RE…

力扣 最大子数组和

动态规划&#xff0c;前缀和&#xff0c;维护状态更新。 题目 从题可以看出&#xff0c;找的是最大和的连续子数组&#xff0c;即一个数组中的其中一个连续部分。从前往后遍历&#xff0c;每遍历到一个数可以尝试做叠加&#xff0c;注意是尝试&#xff0c;因为有可能会遇到一个…

Homestyler 和 Tripo AI 如何利用人工智能驱动的 3D 建模改变定制室内设计

让设计梦想照进现实 在Homestyler,我们致力于为每一个梦想设计师提供灵感的源泉,而非挫折。无论是初学者打造第一套公寓,或是专业设计师展示作品集,我们的直观工具都能让您轻松以惊人的3D形式呈现空间。 挑战:实现定制设计的新纪元 我们知道,将个人物品如传家宝椅子、…

算法练习4——一个六位数

这道题特别妙 大家仔细做一做 我这里采用的是动态规划来解这道题 结合题目要求找出数与数之间的规律 抽象出状态转移方程 题目描述 有一个六位数&#xff0c;其个位数字 7 &#xff0c;现将个位数字移至首位&#xff08;十万位&#xff09;&#xff0c;而其余各位数字顺序不…

client-go 的 QPS 和 Burst 限速

1. 什么是 QPS 和 Burst &#xff1f; 在 kubernetes client-go 中&#xff0c;QPS 和 Burst 是用于控制客户端与 Kubernetes API 交互速率的两个关键参数&#xff1a; QPS (Queries Per Second) 定义&#xff1a;表示每秒允许发送的请求数量&#xff0c;即限速器的平滑速率…

太原理工大学软件设计与体系结构 --javaEE

这个是简答题的内容 选择题的一些老师会给你们题库&#xff0c;一些注意的点我会做出文档在这个网址 项目目录预览 - TYUT复习资料:复习资料 - GitCode 希望大家可以给我一些打赏 什么是Spring的IOC和DI IOC 是一种设计思想&#xff0c;它将对象的创建和对象之间的依赖关系…

深度学习知识点:LSTM

文章目录 1.应用现状2.发展历史3.基本结构4.LSTM和RNN的差异 1.应用现状 长短期记忆神经网络&#xff08;LSTM&#xff09;是一种特殊的循环神经网络(RNN)。原始的RNN在训练中&#xff0c;随着训练时间的加长以及网络层数的增多&#xff0c;很容易出现梯度爆炸或者梯度消失的问…

mmdet

一&#xff0c;configs/_base_ 1.default_runtime.py 2.schedule_1x.py 二&#xff0c;mmdet 1.datasets/coco.py/CocoDataset METAINFO {classes:(milk, red, spring, fanta, sprite, pepsi, king, ice, cola, scream ),# palette is a list of color tuples, which is us…

ElasticSearch 认识和安装ES

文章目录 一、为什么学ElasticSearch?1.ElasticSearch 简介2.ElasticSearch 与传统数据库的对比3.ElasticSearch 应用场景4.ElasticSearch 技术特点5.ElasticSearch 市场表现6.ElasticSearch 的发展 二、认识和安装ES1.认识 Elasticsearch&#xff08;简称 ES&#xff09;2.El…