Opencv 视频的读取与写入
目录
前言
通过路径获取视频内容
获取视频内容
检查是否正确打开
循环播放
完整代码
从摄像头读取视频数据
获取视频设备
其他与直接读取视频一致
完整实例
录制视频
用于创建视频编解码器的四字符码(FourCC)
cv2.VideoWriter()
将视频帧逐帧写入视频文件
完整示例
前言
- 视频是由图片组成的, 视频的每一帧就是一幅图片, 一般是30帧, 表示一秒显示30张图片.- cv2.VideoCapture可以捕获摄像头, 用数字来表示不同的设备, 比如0, 1- 如果是视频文件, 可以直接指定路径即可.
通过路径获取视频内容
获取视频内容
vc = cv2.VideoCapture(path)
检查是否正确打开
vc.isOpened() # 可以读到内容返回True
循环播放
播放视频就是不停的换图像帧,即循环调用 vc.read() 和 cv2.imshow()
完整代码
import cv2
# 打开视频文件
def open_video(path):vc = cv2.VideoCapture(path)ret = vc.isOpened() # 可以读到内容返回True# 检查是否正确打开if ret:print("视频打开成功")else:print("视频打开失败")return -1print(f"开始播放视频: {path.split('/').pop()},按esc键退出")# 循环读帧播放视频while ret:# 可以读到内容ret返回Trueret, frame = vc.read()# 读到最后frame就是空if frame is None:print("视频播放完毕")breakif ret:cv2.imshow('{}'.format(path).split('/').pop(), frame)# 0xFF == 27表示按esc退出键会退出if cv2.waitKey(33) & 0xFF == 27:break# 释放视频对象vc.release()# 关闭窗口cv2.destroyAllWindows()open_video("videos/1.mp4")
从摄像头读取视频数据
获取视频设备
cap = cv2.VideoCapture(0)
其他与直接读取视频一致
完整实例
import cv2# 从摄像头一直读取数据
def camera():# 获取视频设备cap = cv2.VideoCapture(0)print("获取视频设备成功")ret = cap.isOpened()# 创建窗口cv2.namedWindow('video', cv2.WINDOW_NORMAL)cv2.resizeWindow('video', 640, 480)print("成功创建窗口")print("开始播放来自摄像头的视频,按esc键退出)while ret:# 从摄像头读取视频ret, frame = cap.read()# 将视频帧放在窗口中显示cv2.imshow('video', frame)# 等待键盘事件, 按esc键会退出if cv2.waitKey(33) & 0xFF == 27:break# 释放摄像头cap.release()print("摄像头已关闭")# 关闭窗口cv2.destroyAllWindows()
camera()
录制视频
- VideoWriter : 参数一为输出文件, 参数二为多媒体文件格式(VideoWriter_fourcc), 参数三为帧率, 参数四为分辨率. - write 编码并写入缓存 - release 缓存内容写入磁盘, 并释放资源
用于创建视频编解码器的四字符码(FourCC)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
cv2.VideoWriter()
vm = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))
'output.mp4' 是输出视频文件的名称,fourcc 是所选的视频编码器,20 是帧率,(640, 480) 是视频的分辨率。
将视频帧逐帧写入视频文件
vw.write(frame)
完整示例
import cv2# 录制视频
def record_video():# 获取视频设备cap = cv2.VideoCapture(1)print("获取视频设备成功")# *mp4v就是解包操作 等同于 'm', 'p', '4', 'v'fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 用于创建视频编解码器的四字符码(FourCC)。# (640, 480)表示摄像头拍视频, 这个大小搞错了也不行,主要是这个分辨率.vw = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))# 'output.mp4' 是输出视频文件的名称,fourcc 是所选的视频编码器,20 是帧率,(640, 480) 是视频的分辨率。print("开始录制来自摄像头的视频,按esc键退出")# 循环存帧录制视频while cap.isOpened():ret, frame = cap.read()if not ret:print('没有接收到图像')breakvw.write(frame) # 将视频帧逐帧写入视频文件。cv2.imshow('frame', frame) # 显示录制的帧if cv2.waitKey(33) & 0xFF == 27:break# 释放摄像头cap.release()print("摄像头已关闭")record_video()
相关文章:
Opencv 视频的读取与写入
目录 前言 通过路径获取视频内容 获取视频内容 检查是否正确打开 循环播放 完整代码 从摄像头读取视频数据 获取视频设备 其他与直接读取视频一致 完整实例 录制视频 用于创建视频编解码器的四字符码(FourCC) cv2.VideoWriter() 将视频帧…...
LeetCode 833. Find And Replace in String【字符串,哈希表,模拟】1460
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
Cesium轨迹漫游及视角切换
飞行漫游,就是让Camera飞行。Camera有一些方法可以实现位置、视角的调整,比如flyTo,setView方法。但这些方法并不能沿着我们想要的路径调整,在通过插值的方法不停的调用setView,但这样会造成视图卡顿,而且计…...
构建去中心化微服务集群,满足高可用性和高并发需求的实践指南!
随着互联网技术的不断发展,微服务架构已经成为了开发和部署应用程序的一种主流方式。然而,当应用程序需要满足高可用性和高并发需求时,单一中心化的微服务架构可能无法满足性能和可靠性的要求。因此,构建一个去中心化的微服务集群…...
开集输出和开漏输出
首先指明一下以下8中GPIO输入输出模式: GPIO_Mode_AIN 模拟输入; GPIO_Mode_IN_FLOATING 浮空输入; GPIO_Mode_IPD 下拉输入; GPIO_Mode…...
解决内网GitLab 社区版 15.11.13项目拉取失败
问题描述 GitLab 社区版 发布不久,搭建在内网拉取项目报错,可能提示 unable to access https://github.comxxxxxxxxxxx: Failed to connect to xxxxxxxxxxxxxGit clone error - Invalid argument error:14077438:SSL routines:SSL23_GET_S 15.11.13ht…...
【MySQL--->表的约束】
文章目录 [TOC](文章目录) 一、表的约束概念二、空属性约束三、default约束四、zerofill约束五、主键约束六、auto_increment(自增长)约束七、唯一键约束八、外键约束 一、表的约束概念 表通过约束可以保证插入数据的合法性,本质是通过技术手段,保证插入数据收约束,保证数据的…...
github中Keyless Google Maps API在网页中显示地图和标记 无需api key
使用Google Maps API在网页中显示地图和标记的示例博客。以下是一个简单的示例: C:\pythoncode\blog\google-map-markers-gh-pages\google-map-markers-gh-pages\index.html 介绍: 在本篇博客中,我们将学习如何使用Google Maps API在网页中…...
ComPDFKit PDF SDK for Windows Crack
ComPDFKit PDF SDK for Windows Crack 添加了在创建文本框时调整默认属性的支持。 增加了对调整PDF大小时调整宽度的支持。 添加了对编辑文本时更多快捷方式的支持。 优化了文本输入,并将字体样式与原始文本相匹配。 在内容编辑器模式下复制和粘贴时优化了UI交互。 …...
React+Typescript 状态管理
好 本文 我们来说说状态管理 也就是我们的 state 我们直接顺便写一个组件 参考代码如下 import * as React from "react";interface IProps {title: string,age: number }interface IState {count:number }export default class hello extends React.Component<I…...
stable diffusion 运行时报错: returned non-zero exit status 1.
运行sh run.sh安装stable diffusion时报错:ImportError: cannot import name builder from google.protobuf.internal (stable-diffusion-webui/venv/lib/python3.8/site-packages/google/protobuf/internal/__init__.py) 原因:python版本过低࿰…...
el-popover弹窗修改三角样式或者位置
el-popover中设置类名 popper-class"filepopver",我这位置是placement"top-start" <el-popover placement"top-start" popper-class"filepopver" class"filename" width"300" trigger"hover&q…...
Linux驱动开发之点亮三盏小灯
头文件 #ifndef __HEAD_H__ #define __HEAD_H__//LED1和LED3的硬件地址 #define PHY_LED1_MODER 0x50006000 #define PHY_LED1_ODR 0x50006014 #define PHY_LED1_RCC 0x50000A28 //LED2的硬件地址 #define PHY_LED2_MODER 0x50007000 #define PHY_LED2_ODR 0x50007014 #define…...
【SA8295P 源码分析】71 - QAM8295P 原理图参考设计 之 MIPI DSI 接口硬件原理分析
【SA8295P 源码分析】71 - QAM8295P 原理图参考设计 之 MIPI DSI 接口硬件原理分析 一、MIPI-DSI 接口介绍二、高通参考硬件原理图分析:ANX7625 桥接芯片方案2.1 高通参考设计:两路 4-Lane DSI 接口2.2 高通参考设计:DSI0 硬件原理图,将 4 Lane DSI数据通过 ANX7625 桥接芯…...
macOS(m1/m2)破解Sublime Text和Navicat16
破解Sublime Text 说明:全程使用的是终端操作 1. 下载Sublime Text,建议使用brew下载 2. 进入到下载的app的文件夹 cd "/Applications/Sublime Text.app/Contents/MacOS/"3. 执行以下操作以确认版本是否匹配 md5 -q sublime_text | grep -i…...
【排排站:探索数据结构中的队列奇象】
本章重点 队列的概念及结构 队列的实现方式 链表方式实现栈接口 队列面试题 一、队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列&#x…...
Mac OS 中JDK 环境(jdk 1.8.0_831)安装配置、环境变量配置及卸载操作
前言: 摊牌了,本来就有点喜新厌旧的我,特意把系统和开发环境都拉到比较高,想试验一下兼容性和某些新特性,探索了一下新大陆,也见识了各种光怪陆离的妖魔鬼怪。 因为要着手云平台项目的重构改版和新系统的架…...
[JAVAee]Tomcat - Servlet
目录 Tomcat Servlet的工作 创建Servlet ①项目 ②依赖 ③目录 ④代码 ⑤打包 ⑥部署 ⑦验证 Servlet的运行原理 Servlet API HttpServlet 方法 处理Get/POST请求 HttpServletRequest 方法 获取请求中的信息 获取GET请求中的参数 获取POST请求中的参数…...
MAC钓鱼并Root权限上线CS并权限维持,以及所有的坑如何解决
本文转载于:https://www.freebuf.com/articles/web/350592.html 作者:文鸯涂鸦智能安全实验室 制作MAC 一、下载工具 首先从github上下载CrossC2。链接:https://github.com/gloxec/CrossC2/releases/tag/v3.1.0。 根据你CS客户端的操作系统选…...
浅谈OCR中的David Shepard
在OCR(Optical Character Recognition,光学字符识别)中,David Shepard是一种早期的OCR技术,也被称为Shepards Method。 David Shepard是该OCR方法的原始作者。这种方法基于边界追踪算法,用于识别印刷体文本…...
Amphenol ICC RJE1Y33A53162401网线组件解析与替代思路
在工业通信、服务器互联以及智能设备网络连接场景中,RJ45类线束组件一直是不可忽视的重要组成部分。近期不少工程师在项目选型时关注到 Amphenol ICC 推出的 RJE1Y33A53162401 线束组件。本文就围绕这款型号,从产品特点、应用方向、选型思路以及兼容替代…...
API中转站稳定性怎么判断?中小企业选平台别只看SLA数字
API中转站稳定性怎么判断?中小企业选平台别只看SLA数字 摘要 :选择Claude API中转站时,稳定性是核心考量。但"稳定"对不同用户含义不同,本文从不同用户视角分析如何评估API中转站的稳定性。 中转站稳定吗 稳定是相对的&…...
GPU资源利用率深度解析与优化实践
1. GPU资源利用率的核心概念与测量方法在HPC(高性能计算)领域,GPU资源利用率是评估计算效率的黄金指标。不同于简单的"使用率"概念,真正的GPU利用率是一个多维度的综合指标,涉及计算核心、内存控制器、缓存体…...
工业HMI系统核心技术解析与TI解决方案实践
1. 工业HMI系统概述人机界面(HMI)系统是现代工业自动化不可或缺的核心组件,它如同工厂的"神经中枢",将复杂的机器语言转化为直观的可视化信息。想象一下,当操作员站在一台大型工业设备前,不再需要…...
基于MCP的任务编排框架:让AI代理动态规划与执行复杂工作流
1. 项目概述:一个面向AI代理的任务编排与执行框架最近在折腾AI应用开发,特别是想让大语言模型(LLM)能更“自主”地完成一些复杂任务时,发现了一个绕不开的痛点:任务编排。你给模型一个目标,比如…...
硅谷创新精神:从车库、真空管到一美元年薪的启示
1. 硅谷创新精神的物理原点:从车库到孤寂的一美元在科技圈待久了,总会听到一些传奇故事,比如乔布斯在车库里组装第一台苹果电脑,或者惠普的两位创始人在车库里捣鼓出第一个音频振荡器。这些故事被反复传颂,几乎成了硅谷…...
从惊叹到依赖:软件定义时代的技术信任与实用指南
1. 从“惊叹”到“依赖”:我们与技术关系的深度剖析“这玩意儿以前没有的时候,我们是怎么活过来的?” 这念头时不时就会冒出来。我能看懂纸质地图,甚至开车时有时觉得它比谷歌地图更靠谱;我也记得在厚厚的黄页里翻找电…...
白嫖新网免费云主机,挂QQ机器人亲测可用
申请门槛低:只要手机号,不需要人脸识别,不想太麻烦就选择阿贝云 配置够用:1核1G 20G SSD,挂QQ机器人完全够 国内速度快:独立公网IP,延迟低,不掉线申请花了不到5分钟,装完…...
换个角度思考【牛客tracker 每日一题】
换个角度思考 时间限制:1秒 空间限制:256M 知识点:线段树 网页链接 牛客tracker 牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相…...
Kafka高效的原因
Kafka高效的原因Kafka的高效性源于其独特的架构设计和多项优化技术,以下是关键因素:分布式架构与分区机制 Kafka采用分布式设计,主题(Topic)被划分为多个分区(Partition),每个分区可…...
