OpenCV | 基于视频的基础操作

目录

  • 一. OpenCV 关于视频的基础操作
    • 1. cv.VideoCapture ( ) 读取摄像头 / 视频文件
    • 2. cv.VideoCapture ( ).set ( ) 设置视频属性
    • 3. cv.VideoCapture ( ).get ( ) 打印视频属性
    • 4. cv.VideoCapture ( ).read ( ) 读帧
    • 5. capture.release ( ) 释放资源
    • 6. cv.VideoWriter ( ) 视频写入

一. OpenCV 关于视频的基础操作

1. cv.VideoCapture ( ) 读取摄像头 / 视频文件

	cv.VideoCapture ( )参数:参数是0时,默认打开笔记本的内置第一个摄像头参数是视频文件路径时,表示读取对应文件
# 从摄像机获取视频
# 创建一个基于摄像头的视频读取流,给定基于第一个视频设备
capture =cv.VideoCapture(0)# 视频文件读入
# 创建一个基于文件的视频读取流,给定基于第一个视频设备
capture = cv.VideoCapture("video1.avi")

2. cv.VideoCapture ( ).set ( ) 设置视频属性

	cv.VideoCapture().set( )注意:实际参数会发生稍微的偏移作用:设置视频的宽度,高度,帧率,亮度,对比度等属性参数影响:这些属性可以影响视频处理的质量和速度参数设置:capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080) => 宽度capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960) => 高度capture.set(CV_CAP_PROP_FPS, 30) => 帧率 帧capture.set(CV_CAP_PROP_BRIGHTNESS, 1) => 亮度capture.set(CV_CAP_PROP_CONTRAST,40) => 对比度 40capture.set(CV_CAP_PROP_SATURATION, 50) => 饱和度 50capture.set(CV_CAP_PROP_HUE, 50) => 色调 50capture.set(CV_CAP_PROP_EXPOSURE, 50) => 曝光 50 获取摄像头参数

3. cv.VideoCapture ( ).get ( ) 打印视频属性

	参数:cv.VideoCapture.get(0) / cv.CAP_PROP_POS_MSEC  视频文件的当前位置(播放)以毫秒为单位cv.VideoCapture.get(1) / cv.CAP_PROP_POS_FRAMES  基于以0开始的被捕获或解码的帧索引cv.VideoCapture.get(2) / cv.CAP_PROP_POS_AVI_RATIO  视频文件的相对位置(播放):0=电影开始,1=影片的结尾cv.VideoCapture.get(3) / cv.CAP_PROP_FRAME_WIDT  视频流的帧的宽度cv.VideoCapture.get(4) / cv.CAP_PROP_FRAME_HEIGHT  视频流的帧的高度cv.VideoCapture.get(5) / cv.CAP_PROP_FPS  帧速率cv.VideoCapture.get(6) / cv.CAP_PROP_FOURCC  编解码的4字-字符代码cv.VideoCapture.get(7) / cv.CAP_PROP_FRAME_COUNT  视频文件中的帧数cv.VideoCapture.get(8) / cv.CAP_PROP_FORMAT  返回对象的格式cv.VideoCapture.get(9) / cv.CAP_PROP_MODE  返回后端特定的值,该值指示当前捕获模式cv.VideoCapture.get(10) / cv.CAP_PROP_BRIGHTNESS  图像的亮度(仅适用于照相机)cv.VideoCapture.get(11) / cv.CAP_PROP_CONTRAST  图像的对比度(仅适用于照相机)cv.VideoCapture.get(12) / cv.CAP_PROP_SATURATION  图像的饱和度(仅适用于照相机)cv.VideoCapture.get(13) / cv.CAP_PROP_HUE  色调图像(仅适用于照相机)cv.VideoCapture.get(14) / cv.CAP_PROP_GAIN  图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)cv.VideoCapture.get(15) / cv.CAP_PROP_EXPOSURE  曝光(仅适用于照相机)cv.VideoCapture.get(16) / cv.CAP_PROP_CONVERT_RGB  指示是否应将图像转换为RGB布尔标志cv.VideoCapture.get(17) / cv.CAP_PROP_WHITE_BALANCE  × 暂时不支持|cv.VideoCapture.get(18) / cv.CAP_PROP_RECTIFICATION  立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)
capture =cv.VideoCapture(0)
# 未设置视频的宽度,高度
size = (int(capture.get(cv.CAP_PROP_FRAME_WIDTH)),int(capture.get(cv.CAP_PROP_FRAME_HEIGHT)))
print(size)  # (640, 480)
capture =cv.VideoCapture(0)# 设置视频的宽度,高度
success=capture.set(cv.CAP_PROP_FRAME_WIDTH, 1880)
if success:  # if成立时,success不等于0print("设置宽度成功")  # 设置宽度成功
success=capture.set(cv.CAP_PROP_FRAME_HEIGHT, 1480)
if success:print("设置高度成功")  # 设置长度成功# 打印属性
size = (int(capture.get(cv.CAP_PROP_FRAME_WIDTH)),int(capture.get(cv.CAP_PROP_FRAME_HEIGHT)))
print(size)  # (1280, 720)

4. cv.VideoCapture ( ).read ( ) 读帧

	cv.VideoCapture ( ).read ( )作用:从视频流中读取1帧图像【注意】按帧读取视频返回值:第一个返回值是布尔型:读取正确,则返回True,读取失败或读取视频结尾,则会返回False第二个返回值是每一帧的图像:这里图像是三维矩阵,读取的图像为BGR格式
# 读取当前时刻的摄像头捕获的1帧图像
success, frame = capture.read()
# 遍历&等待任意键盘输入
# -1表示等待delay后,没有任何键盘输入(对于视频而言几乎没等)
while success and cv.waitKey(1) == -1:  # 读取正确 and 1毫秒内无键盘输入 == Truecv.imshow('frame', frame)# 读取下一帧的图像success, frame = capture.read()

5. capture.release ( ) 释放资源

capture.release()
cv.destroyAllWindows()

6. cv.VideoWriter ( ) 视频写入

	video_writer = cv.VideoWriter(filename, fourcc, fps, frameSize[, isColor]) 作用:创建一个视频输出对象,即将读取的图像写入指定路径下的文件中参数:filename:第一个参数是要保存的文件的路径fource:指定编码器fps:要保存的视频的帧率frameSize:要保存的文件的画面尺寸isColor:指示是黑白画面还是彩色的画面video_writer.write(frame)作用:将读取到的图像写入video_writer中其中,fource可选择模式 :cv2.VideoWriter_fourcc('M','P','4','V'):MPEG-4编码 .mp4 可指定结果视频的大小cv2.VideoWriter_fourcc('X','2','6','4'):MPEG-4编码 .mp4 可指定结果视频的大小cv2.VideoWriter_fourcc('I','4','2','0'):YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件cv2.VideoWriter_fourcc('P','I','M','I'):MPEG-1编码类型,文件名后缀为.avicv2.VideoWriter_fourcc('X','V','I','D'):MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小cv2.VideoWriter_fourcc('T','H','E','O'):Ogg Vorbis,文件名后缀为.ogvcv2.VideoWriter_fourcc('F','L','V','1'):Flash视频,文件名后缀为.flv

【注意】

	在OpenCV中,写入视频时常需要减去1的原因是:因为视频的帧数是从0开始计数的,而不是从1开始计数的即可以理解为第0帧无内容因此,当要写入10秒时长的视频时,需要计算出总共的帧数,公式为10*fps-1

感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!
本文相关代码存放位置
    【Opencv2 视频操作

祝愉快🌟!


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

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

相关文章

ruoyi-nbcio-plus基于vue3的flowable的自定义业务撤回申请组件的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

《前端面试题》- JS基础 - 简单谈谈ES6新增了哪些内容

问题 简单谈谈ES6新增了哪些内容 回答 ES新增的对象有: Symbol、Set、Map、WeakSet和WeakMap、ArrayBuffer、TypedArray、DataView、Promise、GeneratorFunction 和 Generator、Reflect、Proxy 具体可参考:https://www.jianshu.com/p/b54f7ad1cae3ht…

想做产品经理,应该选择什么专业?

产品经理作为互联网公司的核心职位,一直以来备受关注。随着互联网的不断发展,产品经理的需求也越来越高,很多人都想要了解哪些专业适合做产品经理。本文将为大家介绍几个适合做产品经理的专业。 1、心理学相关专业 C端产品工作的本源&#x…

【产品】ANET智能通信管理机 物联网网关 电力监控/能耗监测/能源管理系统

产品概述 本系列智能通信管理机是一款采用嵌入式硬件计算机平台,具有多个下行通信接口及一个或者多个上行网络接口,用于将一个目标区域内所有的智能监控/保护装置的通信数据整理汇总后,实时上传主站系统,完成遥信、遥测等能源数据…

在 Mac 上配置高级内容缓存设置

在 Mac 上配置高级内容缓存设置 您可以使用高级配置参数针对网络配置微调内容缓存。 您可以在“终端”中使用命令行或通过修改“/资源库/Preferences/com.apple.AssetCache.plist”文件中的键值,来设定内容缓存的高级配置参数。若要使某些更改生效,必须…

如何更改 CSS 背景图片的不透明度

介绍 opacity 是一个 CSS 属性,允许你改变元素的不透明度。默认情况下,所有元素的值为 1。通过将这个值更接近 0,元素将会变得越来越透明。 一个常见的用例是将图像作为背景的一部分。调整不透明度可以提高文本的可读性或实现所需的外观。然…

【实战解析】YOLOv9全流程训练至优化终极指南

【实战解析】YOLOv9全流程训练至优化终极指南 0.引言1.环境准备2.数据预处理(1)数据准备(2)按比例划分数据集(3)xml转txt脚本(4)配置文件 3.模型训练(1)单GPU…

打开游戏缺少dll文件怎么办,dll文件一键修复方法

在我们日常操作电脑,经常会遇到各种各样的问题。比如想玩一会游戏的时候,电脑屏幕上却赫然弹出一则令人颇为扫兴的提示:“打开游戏缺少dll文件”。这个问题可能会让我们感到困惑和沮丧,但是幸运的是,有很多方法可以帮助…

iOS cocoapods pod FrozenError and RuntimeError

0x00 报错日志 /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.12.0/lib/cocoapods/user_interface/error_report.rb:34:in force_encoding: cant modify frozen String (FrozenError)from /Library/Ruby/Gems/2.6.0/gems/cocoapods-1.12.0/lib/cocoapods/user_interface/error_r…

电压继电器SRMUVS-220VAC-2H2D 导轨安装 JOSEF约瑟

系列型号: SRMUVS-58VAC-2H欠电压监视继电器;SRMUVS-100VAC-2H欠电压监视继电器; SRMUVS-110VAC-2H欠电压监视继电器;SRMUVS-220VAC-2H欠电压监视继电器; SRMUVS-58VAC-2H2D欠电压监视继电器;SRMUVS-100…

数据仓库与数据挖掘(第三版)陈文伟思维导图1-5章作业

第一章 概述 8.基于数据仓库的决策支持系统与传统决策支持系统有哪些区别? 决策支持系统经历了4个阶段。 1.基本决策支持系统 是在运筹学单模型辅助决策的基础上发展起来的,以模型库系统为核心,以多模型和数据库的组合形成方案辅助决策。 它…

EasyExcel写数据

本地文件写数据 package com.qiangesoft.easyexcel.write;import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.data.*; import com.alibaba.excel.util.FileUt…

【51媒体网】企业商业宣传用媒体官方直播的优势有哪些

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 企业宣传使用媒体官方直播的优势可能体现在以下几个方面: 提升品牌知名度:通过官方媒体的直播平台,企业可以向更广泛的受众展示自己的品牌和产品&…

Shell 输入输出:从 Read 到管道的奇妙旅程

在计算机世界中,Shell 是一种强大的工具,它允许我们与操作系统进行交互。Shell 提供了一种简单而强大的方式来处理输入和输出,使得我们可以在命令行中执行各种任务。本文将带你领略 Shell 输入输出的奇妙之旅,从 Read 到管道的探索…

如何监控容器或K8s中的OpenSearch

概述 当前 OpenSearch 使用的越来越多, 但是 OpenSearch 生态还不尽完善. 针对如下情况: 监控容器化或运行在 K8s 中的 OpenSearch 我查了下, 官方还没有提供完备的方案. 这里如何监控 K8s 中的 OpenSearch, 包括安装 exporter 插件、采集、展示全环节。 OpenSearch 简介…

Linux:sprintf、snprintf、vsprintf、asprintf、vasprintf比较

这些函数都在stdio.h里,不过不同系统不同库,有些函数不一定提供。 1. sprintf 函数原型: int sprintf (char *str, const char *format, ...); extern int sprintf (char *__restrict __s, const char *__restrict __format, ...); 功能是将…

2017NOIP普及组真题 4. 跳房子

线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1417\ 核心思想 首先、本题中提到 “ 至少 要花多少金币改造机器人,能获得 至少 k分 ”。看到这样的话语,基本可以考虑要使用 二分答案。 那么,本题中…

SQL注入攻击和防御

声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。 # 概述 SQL注入是一种网络安全攻击,它利用了Web应用程序对用户输入的验证不足,从而在后台数据…

用vue3写一个AI聊天室

效果图如下&#xff1a; 1、页面布局&#xff1a; <template><div class"body" style"background-color: rgb(244, 245, 248); height: 730px"><div class"container"><div class"right"><div class"…

如何用electron(vue)搜索电脑本地wifi

对于搜索本地 WiFi 网络&#xff0c;可以使用 Electron 结合 Node.js 来编写一个简单的应用程序。 以下是一个基本的示例&#xff0c;它使用 Node.js 的 wifi 模块来搜索并列出附近的 WiFi 网络&#xff1a; 首先&#xff0c;确保你已经安装了 Node.js 和 Electron。 然后&am…