视频基础操作
1.1. 例子
读取mp4格式的视频,将每一帧改为灰度图,并且打上水印(“WaterMark”),并将其输出保存为out.mp4,在这个例子中可以看到视频读取,每帧数据处理,视频保存的整体流程简单示例
import cv2try:cap=cv2.VideoCapture("CatCloth.mp4")if not cap.isOpened():print("Video can't be opened")raise IOError# 获取视频的宽度、高度和帧率width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))fps = cap.get(cv2.CAP_PROP_FPS)delay=int(1000/(fps)) #计算每帧视频播放延时# 创建 VideoWriter 对象fourcc = cv2.VideoWriter_fourcc(*'mp4v')output_path="OutPut.mp4"out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))while True:ret,frame=cap.read() #读取一帧数据if not ret:break#对每一帧图像进行处理# 转换为灰度图像gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 打上水印cv2.putText(gray_frame, "WaterMark", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)# 写入输出文件out.write(gray_frame)# 显示处理后的帧cv2.imshow("Processed Video", gray_frame)#此处延迟FPS计算出来的时间,按照视频原有速度播放视频 按q键退出if(cv2.waitKey(delay)&0xff==ord('q')):break# 释放 VideoCapture 和 VideoWriter 对象及所有窗口资源cap.release() out.release()cv2.destroyAllWindows()
except IOError as e:print(f'IOError:{e}')
except Exception as e:print(f"Error: {e}")
1.2. 常见操作补充说明
1.2.1. 读取视频文件或摄像头
使用 cv2.VideoCapture() 可以读取视频文件或摄像头。
cv2.VideoCapture 是一个用于捕获视频的类,可以从视频文件、摄像头或网络视频流中读取视频帧。它的构造函数和方法支持多种参数和重载形式,以便灵活地处理不同的视频源。
- 默认构造函数:
cap = cv2.VideoCapture()
-
- 创建一个空的
VideoCapture对象,通常用于后续调用open()方法打开视频源。
- 创建一个空的
- 从视频文件或摄像头打开:
cap = cv2.VideoCapture(filename, apiPreference=CAP_ANY)
-
filename:视频文件路径或摄像头索引(整数,如0表示默认摄像头)。apiPreference:指定使用的后端 API(如cv2.CAP_ANY、cv2.CAP_FFMPEG等)。默认值为cv2.CAP_ANY,表示自动选择合适的后端。
- 从视频文件或摄像头打开(带参数):
cap = cv2.VideoCapture(filename, apiPreference, params)
-
params:一个参数列表,用于指定额外的配置(如分辨率、帧率等)。参数以(paramId, paramValue)的形式传递。
常用参数解释:
filename:
-
- 可以是视频文件路径(如
'video.mp4')。 - 可以是摄像头索引(如
0)。 - 可以是网络视频流的 URL(如
'http://192.168.1.100:8080/video')。
- 可以是视频文件路径(如
apiPreference:
-
- 指定使用的后端 API,例如:
-
-
cv2.CAP_ANY:自动选择后端。cv2.CAP_FFMPEG:使用 FFmpeg 后端。cv2.CAP_MSMF:使用 Microsoft Media Foundation 后端(Windows)。cv2.CAP_V4L:使用 Video4Linux 后端(Linux)。
-
params:
-
- 一个参数列表,用于指定额外的配置。例如:
-
-
cv2.CAP_PROP_FRAME_WIDTH:设置帧宽度。cv2.CAP_PROP_FRAME_HEIGHT:设置帧高度。cv2.CAP_PROP_FPS:设置帧率。
-
# 读取视频文件 自动选择后端,且无其他设置
cap = cv2.VideoCapture("example.mp4")# 读取摄像头
# cap = cv2.VideoCapture(0) # 默认摄像头(索引0)#检查视频是否正确读取
if not cap.isOpened():print("Video can't be opened")return
1.2.2. 获取视频属性
可以通过 cap.get() 获取视频的各种属性,例如宽度、高度、帧率等。
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) # 帧宽
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) # 帧高
fps = cap.get(cv2.CAP_PROP_FPS) # 帧率
print(f"Width: {width}, Height: {height}, FPS: {fps}")
1.2.3. 逐帧读取视频
通过循环逐帧读取视频,并处理每一帧。
while cap.isOpened():ret, frame = cap.read() # 读取一帧if not ret:break # 视频结束## 显示当前帧cv2.imshow("Frame", frame)# 按下 'q' 键退出if cv2.waitKey(25) & 0xFF == ord('q'):breakcap.release() # 释放视频流
cv2.destroyAllWindows()
1.2.4. 保存视频
使用 cv2.VideoWriter() 可以将处理后的视频保存为文件。
cv2.VideoWriter() 是 OpenCV 库中用于创建视频写入对象的函数,可以将一组图像帧保存为视频文件。
#函数参数介绍
cv.VideoWriter(filename, fourcc, fps, frameSize[, isColor])
参数介绍:
- filename (str): 输出视频文件的路径。
- fourcc (int): 指定编码器的四字符代码(FourCC)。
-
- 例如:
- - FFmpeg 使用:
-
-
-
cv2.VideoWriter_fourcc(*'mp4v')cv2.VideoWriter_fourcc(*'XVID')。
-
-
-
- Windows 开发版 上编译的 OpenCV 使用
-
-
cv2.VideoWriter_fourcc(*'MJPG')。
-
- fps (float): 视频的帧率(每秒帧数)。
- frameSize (tuple): 视频帧的尺寸(宽,高)。
- isColor (bool, optional): 指示视频是否为彩色。默认为
True(彩色)。如果设置为False,输出视频将为灰度。
# 设置视频编码器和帧率
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 使用 XVID 编码器
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480)) # 文件名、编码器、帧率、尺寸# 写入帧
while cap.isOpened():ret, frame = cap.read()if not ret:breakout.write(frame) # 写入帧cv2.imshow("Frame", frame)if cv2.waitKey(25) & 0xFF == ord('q'):breakcap.release()
out.release() # 关闭视频写入
cv2.destroyAllWindows()相关文章:
视频基础操作
1.1. 例子 读取mp4格式的视频,将每一帧改为灰度图,并且打上水印(“WaterMark”),并将其输出保存为out.mp4,在这个例子中可以看到视频读取,每帧数据处理,视频保存的整体流程简单示例 import cv…...
微信小程序 - 组件和样式
组件和样式介绍 在开 Web 网站的时候: 页面的结构由 HTML 进行编写,例如:经常会用到 div、p、 span、img、a 等标签 页面的样式由 CSS 进行编写,例如:经常会采用 .class 、#id 、element 等选择器 但在小程序中不能…...
在本地校验密码或弱口令 (windows)
# 0x00 背景 需求是验证服务器的弱口令,如果通过网络侧校验可能会造成账户锁定风险。在本地校验不会有锁定风险或频率限制。 # 0x01 实践 ## 1 使用 net use 命令 可以通过命令行使用 net use 命令来验证本地账户的密码。打开命令提示符(CMD࿰…...
【Elasticsearch】Elasticsearch检索方式全解析:从基础到实战(二)
接着上一篇文章;我们继续来研究es的复杂检索 文章目录 (1) bool用来做复合查询(2)Filter【结果过滤】(3)term(4)Aggregation(执行聚合) (1) bool用来做复合查询 复合语…...
游戏引擎学习第96天
讨论了优化和速度问题,以便简化调试过程 节目以一个有趣的类比开始,提到就像某些高端餐厅那样,菜单上充满了听起来陌生或不太清楚的描述,需要依靠服务员进一步解释。虽然这听起来有些奇怪,但实际上,它反映…...
(Xshell 8 + Xftp 8)下载安装miniconda至服务器指定目录+配置虚拟环境
一一一一 Xshell 8 Xftp 8均已登录,miniconda.sh安装包已经放在服务器指定目录中 二二二二 赋予脚本执行权限 chmod x Miniconda3-latest-Linux-x86_64.sh安装miniconda ./Miniconda3-latest-Linux-x86_64.sh -p /data1/huyan/zhangyifeng/miniconda3一直Enter…...
多机器人系统的大语言模型:综述
25年2月来自 Drexel 大学的论文“Large Language Models for Multi-Robot Systems: A Survey”。 大语言模型 (LLM) 的快速发展为多机器人系统 (MRS) 开辟新的可能性,从而增强通信、任务规划和人机交互。与传统的单机器人和多智体系统不同,MRS 带来独特…...
通用的将jar制作成docker镜像sh脚本
通用的将jar制作成docker镜像sh脚本 为了在将 JAR 制作成 Docker 镜像的过程中创建日志目录,可以对之前的脚本进行扩展。以下是改进后的脚本,会在镜像构建时在容器内创建日志目录,并将日志文件挂载到该目录下。 在生成的 Dockerfile 中添加…...
Python----PyQt开发(PyQt基础,环境搭建,Pycharm中PyQttools工具配置,第一个PyQt程序)
一、QT与PyQT的概念和特点 1.1、QT QT是一个1991年由The Qt Company开发的跨平台C图形用户界面应用程序开发 框架,可构建高性能的桌面、移动及Web应用程序。也可用于开发非GUI程序,比如 控制台工具和服务器。Qt是面向对象的框架,使用特殊的代…...
DeepSeek+3D视觉机器人应用场景、前景和简单设计思路
DeepSeek3D视觉机器人在多个领域具有广泛的应用场景和巨大的前景。以下是详细的分析: 应用场景 制造业 自动化装配:机器人可以精确地抓取和装配零件,提高生产效率和产品质量。 质量检测:通过3D视觉技术检测产品缺陷,确…...
MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32
MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32 1. 获取代码:2. 加入你的项目2.1 以 STM32 为例:2.2 以 ESP-IDF 为例: 3. 对接 API3.1 以 STM32 为例: 4. 更多函数说明5. 写入 EEPROM 示例 MT6835 Framework 纯C语言实现,跨平台&…...
python视频爬虫
文章目录 爬虫的基本步骤一些工具模拟浏览器并监听文件视频爬取易错点一个代码示例参考 爬虫的基本步骤 1.抓包分析,利用浏览器的开发者工具 2.发送请求 3.获取数据 4.解析数据 5.保存数据 一些工具 requests, 用于发送请求,可以通过get,p…...
嵌入式WebRTC压缩至670K,目标将so动态库压缩至500K,.a静态库还可以更小
最近把EasyRTC的效果发布出去给各大IPC厂商体验了一下,直接就用EasyRTC与各个厂商的负责人进行的通话,在通话中,用户就反馈效果确实不错! 这两天有用户要在海思hi3516cv610上使用EasyRTC,工具链是:gcc-2024…...
Rhel Centos环境开关机自动脚本
Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…...
phpipam1.7安装部署
0软件说明 phpipam是一个开源Web IP地址管理应用程序(IPAM) phpipam官网:https://www.phpipam.net/ 1安装环境 操作系统:Rocky Linux9.5x86_64 phpipam版本:1.7 php版本:8.0.30 数据库版本:…...
深入理解org.springframework.web.context.request.RequestContextHolder
在Spring Web应用中,RequestContextHolder是一个非常有用的工具类,用于在任何地方访问当前请求的上下文信息。它解决了非Controller层或非过滤器层需要访问请求上下文的问题,如在Service层或DAO层。以下是对 RequestContextHolder的详细解析。…...
Django中select_related 的作用
Django中这句代码Dynamic.objects.select_related(song)是什么意思? 在 Django 中,这句代码: Dynamic.objects.select_related(song) 的作用是 在查询 Dynamic 模型的同时,预加载 song 关联的外键对象,从而减少数据…...
正泰中间电磁继电器【8脚10A】DC24V 待机功率
需求:继电器能耗测试。 1.连接24V2A的电源, 2. 稳定功率为 1.4W 3. 正泰中间电磁继电器【8脚10A】直流DC24V 注:联通时电磁继电器会轻微发热 4.电磁继电器的工作原理基于电流的磁效应 电磁激励:电磁继电器主要由线圈、铁芯、衔…...
C++ 中的 Const 关键字(1)
C 中的 Const 关键字 最后更新: 2024 年 8 月 6 日 本文讨论了C中const 关键字的各种功能。只要将const 关键字附加到任何方法 ()、变量、指针变量以及类的对象上,它就会阻止特定对象/方法 ()/变量修改其数据项的值。 常量变量: 常量变量的声…...
Mac上搭建宝塔环境并部署PHP项目
安装Docker Desktop》搭建Centos版本的宝塔环境》部署PHP项目 1. 下载Docker for mac 软件:https://www.docker.com/ 或使用终端命令:brew install --cask --appdir/Applications docker 2. 使用命令安装宝塔环境的centos7系统: docker pul…...
哈希表-两个数的交集
代码随想录-刷题笔记 349. 两个数组的交集 - 力扣(LeetCode) 内容: 集合的使用 , 重复的数剔除掉,剩下的即为交集,最后加入数组即可。 class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer…...
win11 终端乱码导致IDE 各种输出也乱码
因为 win11 终端乱码导致IDE 各种输出也乱码导致作者对此十分头大。所以研究了各种方法。 单独设置终端编码对 HKEY_CURRENT_USER\Console 注册表进行修改对 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processo 注册表进行修改使用命令[Console]::OutputEncoding [Syst…...
LabVIEW用户界面(UI)和用户体验(UX)设计
作为一名 LabVIEW 开发者,满足功能需求、保障使用便捷与灵活只是基础要求。在如今这个用户体验至上的时代,为 LabVIEW 应用程序设计直观且具有美学感的界面,同样是不容忽视的关键任务。一个优秀的界面设计,不仅能提升用户对程序的…...
23、深度学习-自学之路-激活函数relu、tanh、sigmoid、softmax函数的正向传播和反向梯度。
在使用这个非线性激活函数的时候,其实我们重点还是学习的是他们的正向怎么传播,以及反向怎么传递的。 如下图所示: 第一:relu函数的正向传播函数是:当输入值(隐藏层)值大于了,就输出…...
【matlab优化算法-16期】基于遗传算法的电热气及储能综合优化项目实践
电热气及储能综合优化项目实践 一、前言 随着能源转型和可持续发展的推进,综合能源系统的优化逐渐成为研究热点。本文介绍了一个电热气及储能综合优化项目,旨在通过优化算法实现多能源系统的协同运行,提高能源利用效率,降低运行…...
单例模式和单例Bean
单例模式 定义:单例模式是一种软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。 实现方式 饿汉式:在类加载时就立即创建单例实例,线程安全,调用效率高,但可能会造成…...
springboot239-springboot在线医疗问答平台(源码+论文+PPT+部署讲解等)
💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm…...
DeepSeek系统崩溃 | 极验服务如何为爆火应用筑起安全防线?
引言 极验服务让您的产品站在风口之时,不必担心爆红是灾难的开始,而是期待其成为驱动持续创新的全新起点。 01现象级狂欢背后,你的业务安全防线抗得住吗? “近期DeepSeek线上服务受到大规模恶意攻击,注册可能繁忙&am…...
vcredist_x64.exe 是 Microsoft Visual C++ Redistributable 的 64 位版本
vcredist_x64.exe 是 Microsoft Visual C++ Redistributable 的 64 位版本,它提供了运行基于 Visual C++ 编写的应用程序所需的库文件。许多 Windows 应用程序都依赖这些库来正常运行,特别是使用 Visual Studio 编译的程序。 用途和重要性: 运行时库:vcredist_x64.exe 安装…...
Spring:Spring实现AOP的通俗理解(有源码跟踪)
目录标题 AOP定义SpringAOP和AspectJ联系Spring如何实现AOPAOP的代理对象AOP的代理对象生成过程 AOP定义 AOP (Aspect Orient Programming):直译过来就是 面向切面编程。AOP 是一种编程思想用途:Transactions (事务调…...
