opencv基础: 视频,摄像头读取与保存的常用方法

当然还可以从视频中抓取截图,所以现在聊一下常用的抓取视频截图的的方法。

VideoCapture 方法

 cv2.VideoCapture();cv2.VideoCapture( device);cv2.VideoCapture(filename);

上面有三种构造方法,

  • 第一种是无法构造方法。

  • 第二种参数device是一个数字。

    一般笔记本如此写cv2.VideoCapture(0); 因为默认是0 ,如果有多个摄像头,就需要看设置的摄像头代表的数字了。

  • 第二种参数device是一个字符串。

    其代表是从视频文件种得到帧。

release 方法

释放资源的方法:

cap = cv2.VideoCapture();
cap.release()

read 方法

read方法就是读取视频的帧的方法。

cap = cv2.VideoCapture();
cap.read()
  • read() 方法返回的有两个值
    • 第一个值:为状态值,读到帧就是true
    • 第二个值:返回的视频帧,通俗的说就是图片

来一个例子:

import  cv2
Cap = cv2.VideoCapture("1.mp4");
flag,phto= Cap.read();cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
cv2.imshow("Wind",phto)key=cv2.waitKey(0)if key=="q":cv2.destroyWindow()
Cap.release()

但是如果观察效果的话,会发现这是窗口只有镜头内容。

在这里插入图片描述

所以需要用一个while循环

import  cv2
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
while True:flag, phto = Cap.read();if flag:cv2.imshow("Wind",phto)key=cv2.waitKey(1)if(key & 0xFF == ord('q')):breakelse:break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()

isOpened方法

这个方法是判断摄像头和文件是发可以正常打开,返回True 或 False:

# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
# 可以使用判断是否摄像头打开 作为标识符值
Cap.isOpened() 

可以读取文件的方法修改为:

import  cv2
# 如果是通过摄像头的话
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
# Cap.isOpened():  可以使用判断是否摄像头打开  以及文件是否可以正常打开
while Cap.isOpened():flag, phto = Cap.read();if flag:cv2.imshow("Wind",phto)# cv2.resizeWindow("Wind", 1920, 1080)key=cv2.waitKey(1)if(key & 0xFF == ord('q')):breakelse:break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()

补充

这里补充一点 如果再循环外:

cv2.resizeWindow("Wind", 1920, 1080)

只会在循环种呈现一次,如果真的需要,那就行说在循环体内再写一遍。

VideoWriter方法

有时候,打开摄像头等,需要将内容保存到本地,所以就需要这个方法:

如下:

cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
  1. filename(必选):要写入的视频文件的名称。

  2. fourcc(必选):用于指定视频编解码器的4个字符代码。例如,'MJPG’表示Motion JPEG编码。

    fourcc = cv2.VideoWriter_fourcc(*'MJPG')
    
  3. fps(必选):视频的帧率,以每秒帧数(FPS)为单位。

  4. frameSize(必选):视频帧的大小,以像素为单位。

  5. isColor(可选):一个布尔值,指示是否使用彩色。如果为True,则使用彩色,否则为灰度。

filename = 'tang1.avi'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
fps = 30.0
frameSize = (640, 480)
isColor = True# 创建VideoWriter对象
out = cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)

不过这个等于创建了个对象,还需要进入写入,所以需要在用如下方法:

#frame = cv2.imread('frame.jpg') 或者是视频  flag, frame = Cap.read();
out.write(frame)

结合如下写:

import  cv2
# 如果是通过摄像头的话
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
filename = 'tang1.avi'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
fps = 30.0
frameSize = (640, 480)
isColor = True# 创建VideoWriter对象
out = cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
# cv2.resizeWindow("Wind", 1920, 1080)
# Cap.isOpened():  可以使用判断是否摄像头打开  以及文件是否可以正常打开
while Cap.isOpened():flag, frame = Cap.read();if flag:cv2.imshow("Wind",phto)out.write(frame)# cv2.resizeWindow("Wind", 1920, 1080)key=cv2.waitKey(1)if(key & 0xFF == ord('q')):breakelse:break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()

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

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

相关文章

【群智能算法改进】一种改进的鹈鹕优化算法 IPOA算法[2]【Matlab代码#58】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始POA算法2. 改进后的IPOA算法2.1 随机对立学习种群初始化2.2 动态权重系数2.3 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始POA算法…

企业架构LNMP学习笔记24

学习目标和内容: 1、能够描述高可用HA的作用 2、能够理解VIP的切换:虚拟IP。 3、能够描述keepalived作用:保持活跃。主备的服务器的关系。 4、能够理解主master和备backup服务器关系 5、能够实现主备服务器高可用配置:主服务…

Java——》线程间是如何通信的

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

鸿蒙系列-如何使用DevEco分析app的性能

如何使用DevEco分析app的性能 性能优化、启动优化、内存优化、FPS监测、性能分析🧐 在鸿蒙OpenHarmony开发过程中,开发者开发的代码(Stage 模型)通常以调用 ArkUI 框架的代码为主,主要优化的代码部分也在其中&#x…

信息安全保障

文章目录 目录 文章目录 一.信息安全的定义 信息安全的概念 狭义的信息安全概念: 广义的信息安全问题: 信息系统安全问题的根源: 威胁情报 威胁情报的作用: 信息安全的特征 二.信息系统的属性 三.信息安全的视角 国家视角下的信…

LlamaIndex:将个人数据添加到LLM

推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 LlamaIndex是基于大型语言模型(LLM)的应用程序的数据框架。像 GPT-4 这样的 LLM 是在大量公共数据集上预先训练的,允许开箱即用的令人难以置信的自然语言处理能力。但是,…

HTML的段落中怎么样显示出标签要使用的尖括号<>?

很简单&#xff1a; 符号 < 用 < 替代&#xff1b; 符号 > 用 > 替代。 示例代码如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>HTML中怎样打出尖括号</title> </head> <b…

AP3266 大功率同步降压恒流芯片 双路并用大电流LED车灯驱动线路 过EMC

产品描述 AP3266 是高效率、外围简单、内置功率管的同步降压恒流芯片&#xff0c;适用于4-40V输入的降压LED恒流驱动芯片。输出最大功率可达 40W&#xff0c;最大电流3.6A。AP3266 可通过调节 OVP 端口的分压电阻&#xff0c;设定输出空载电压 保护&#xff0c;避免高压 空载上…

【数据库事务日志碎片原理分析与方案】-深入解析篇.pdf

日志增长与 VLF 文件的个数 通过上面的相关内容的介绍&#xff0c;我们已经知道了日志文件自动的增长会到了一些问 题&#xff0c;而事实确实如此&#xff0c;下面&#xff0c;我们就来更加清楚的看看这些问题。 很显然&#xff0c;我们不希望日志文件任意的增长&#xff0c;…

外汇交易技巧分享:利用MT4交易平台进行精准的外汇技术分析

在外汇交易市场中&#xff0c;技术分析是一种重要的决策工具&#xff0c;能够帮助交易者预测价格走势和制定交易策略。而MT4交易平台作为一种功能强大、广泛应用的交易软件&#xff0c;为交易者提供了丰富的技术分析工具和功能。本文将与大家分享几个利用MT4交易平台(可在mtw.s…

Revit SDK 介绍:CreateAirHandler 创建户式风管机

前言 这个例子介绍如何通过 API 创建一个户式风管机族的内容&#xff0c;包含几何和接头。 内容 效果 核心逻辑 必须打开机械设备的族模板创建几何实体来表示风管机创建风机的接头 创建几何实体来表示风管机 例子中创建了多个拉伸&#xff0c;下面仅截取一段代码&#xff…

vue2 vuex

一、Vuex 概述 Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;Vuex 是一个插件&#xff0c;可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。 使用场景 某个状态 在 很多个组件 来使用 (个人信息) 多个组件 共同维护 一份数据 (购物车) …

虚函数、纯虚函数、多态

一.虚函数 在基类的函数前加上virtual关键字&#xff0c;在派生类中重写该函数&#xff0c;运行时将会根据所指对象的实际类型来调用相应的函数&#xff0c;如果对象类型是派生类&#xff0c;就调用派生类的函数&#xff0c;如果对象类型是基类&#xff0c;就调用基类的函数。 …

蓝桥杯打卡Day5

文章目录 日志排序重复者 一、日志排序IO链接 本题思路:本题就是根据就是排序的知识点&#xff0c;在sort内部可以使用仿函数来改变此时排序规则。 #include <bits/stdc.h>const int N10010; int n; std::string logs[N];int main() {std::ios::sync_with_stdio(false)…

java网络编程,套接字socket

目录 一 网络概述 二 网络的类型分类 三 网络体系结构 四 网络通信协议概述 五 网络通信协议种类 六 Socket简介 七 Socket路径 八 java网络编程三要素 九 基于UDP协议的Socket编程 十 基于TCP协议的Socket编程 十一 基于TCP协议和UDP的区别 一 网络概述 多台相互连…

Docker 的常用命令

0 基本命令 概述 [root192 home]# docker --helpUsage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersOptions:--config string Location of client configfiles (default "/root/.docker")-c, --context string Name of the context…

【ES】笔记-Class类剖析

Class Class介绍与初体验ES5 通过构造函数实例化对象ES6 通过Class中的constructor实列化对象 Class 静态成员实例对象与函数对象的属性不相通实例对象与函数对象原型上的属性是相通的Class中对于static 标注的对象和方法不属于实列对象&#xff0c;属于类。 ES5构造函数继承Cl…

【Linux】环境变量

环境变量 一、引子echo $NAME [NAME:环境变量名] 二、基本概念概念常见的环境变量PATH : 指定命令的搜索路径测试HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的家目录)SHELL : 当前Shell,它的值通常是/bin/bash。 和环境变量相关的命令echo -- 显示某个环境变…

[html]当网站搭建、维护的时候,你会放个什么界面?

效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网站建设中</title><style>/* 基础样式 */body, html {margin: 0;padding: 0;height: 100%;font-family: Arial, sa…

Stable Diffusion stable-diffusion-webui ControlNet Lora

Stable Diffusion Stable Diffusion用来文字生成图片&#xff0c;ControlNet就是用来控制构图的&#xff0c;LoRA就是用来控制风格的 。 stable-diffusion-webui 国内加速官网&#xff1a; mirrors / AUTOMATIC1111 / stable-diffusion-webui GitCode 安装参考&#xff1a…