Lesson5-1:OpenCV视频操作---视频读写

学习目标

  • 掌握读取视频文件,显示视频,保存视频文件的方法

1 从文件中读取视频并播放

在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件:

  1. 创建读取视频的对象
cap = cv.VideoCapture(filepath)

参数:

  • filepath: 视频文件路径
  1. 视频的属性信息

    2.1. 获取视频的某些属性,

retval = cap.get(propId)

参数:

  • propId: 从0到18的数字,每个数字表示视频的属性
    常用属性有:
    在这里插入图片描述
    2.2 修改视频的属性信息
cap.set(propId,value)

参数:

  • proid: 属性的索引,与上面的表格相对应
  • value: 修改后的属性值
  1. 判断图像是否读取成功
isornot = cap.isOpened()
  • 若读取成功则返回true,否则返回False
  1. 获取视频的一帧图像
ret, frame = cap.read()

参数:

  • ret: 若获取成功返回True,获取失败,返回False
  • Frame: 获取到的某一帧的图像
  1. 调用cv.imshow()显示图像,在显示图像时使用cv.waitkey()设置适当的持续时间,如果太低视频会播放的非常快,如果太高就会播放的非常慢,通常情况下我们设置25ms就可以了。

  2. 最后,调用cap.realease()将视频释放掉

示例:

import numpy as np
import cv2 as cv
# 1.获取视频对象
cap = cv.VideoCapture('DOG.wmv')
# 2.判断是否读取成功
while(cap.isOpened()):# 3.获取每一帧图像ret, frame = cap.read()# 4. 获取成功显示图像if ret == True:cv.imshow('frame',frame)# 5.每一帧间隔为25msif cv.waitKey(25) & 0xFF == ord('q'):break
# 6.释放视频对象
cap.release()
cv.destoryAllwindows()

2 保存视频

在OpenCV中我们保存视频使用的是VedioWriter对象,在其中指定输出文件的名称,如下所示:

  1. 创建视频写入的对象
out = cv2.VideoWriter(filename,fourcc, fps, frameSize)

参数:

  • filename:视频保存的位置
  • fourcc:指定视频编解码器的4字节代码
  • fps:帧率
  • frameSize:帧大小
  • 设置视频的编解码器,如下所示,
retval = cv2.VideoWriter_fourcc( c1, c2, c3, c4 )

参数:

  • c1,c2,c3,c4: 是视频编解码器的4字节代码,在fourcc.org中找到可用代码列表,与平台紧密相关,常用的有:
    在Windows中:DIVX(.avi)
    在OS中:MJPG(.mp4),DIVX(.avi),X264(.mkv)。

  • 利用cap.read()获取视频中的每一帧图像,并使用out.write()将某一帧图像写入视频中。

  • 使用cap.release()out.release()释放资源。

示例:

import cv2 as cv
import numpy as np# 1. 读取视频
cap = cv.VideoCapture("DOG.wmv")# 2. 获取图像的属性(宽和高,),并将其转换为整数
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))# 3. 创建保存视频的对象,设置编码格式,帧率,图像的宽高等
out = cv.VideoWriter('outpy.avi',cv.VideoWriter_fourcc('M','J','P','G'), 10, (frame_width,frame_height))
while(True):# 4.获取视频中的每一帧图像ret, frame = cap.read()if ret == True: # 5.将每一帧图像写入到输出文件中out.write(frame)else:break # 6.释放资源
cap.release()
out.release()
cv.destroyAllWindows()

总结

  1. 读取视频:
  • 读取视频:cap = cv.VideoCapture()
  • 判断读取成功:cap.isOpened()
  • 读取每一帧图像:ret,frame = cap.read()
  • 获取属性:cap.get(proid)
  • 设置属性:cap.set(proid,value)
  • 资源释放:cap.release()
  1. 保存视频
  • 保存视频: out = cv.VideoWrite()
  • 视频写入:out.write()
  • 资源释放:out.release()

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

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

相关文章

IIS WebDAV配置,https绑定及asp设置

IIS支持标准CGI,因此可以用程序语言针对STDIN和STDOUT开发。 IIS CGI配置和CGI程序FreeBasic, VB6, VC 简单样例_Mongnewer的博客-CSDN博客 IIS支持脚本解释CGI,因此可以用脚本语言针对STDIN和STDOUT开发。 IIS perl python cbrother php脚本语言配置…

进军公有云这一年,OceanBase做了什么

*本文转载自微信公众号“机器之心,ID:almosthuman2014” 如今,数据库市场正在迈入新的竞争阶段——一场云上的角逐。 2022 年,中国公有云数据库市场规模首次过半[1],预计未来占比将进一步扩大。许多中国的数据库厂商也…

Leetcode:【169. 多数元素】

题目 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 难度:简单 题目链接:169. 多数元素 示例 1&#xff…

在Git中将本地分支推送到远程仓库

这里很明显 我git云端只有一个master分支 然后 我在本地创建了一个develop分支 然后 现在我想将他放在云端 首先 我们要执行 git checkout -b develop将本地切换到 develop 分支上 因为我这里已经选择的就是了 就不需要了 然后我们执行 git push origin develop这样 刷新云…

Http 1.0 1.1 2.0 3.0 版本差别

Http 1.0 发布年份:1996 非官方标准 短链接:每一次请求都对应一次TCP的连接与释放 开销大:每次请求都要TCP的连接与释放队头阻塞:每次请求都必须等上一次请求获得响应之后,才可以发送;效率低下 缓存&…

2023年7月京东奶粉行业品牌销售排行榜(京东数据产品)

鲸参谋监测的京东平台7月份奶粉市场销售数据已出炉! 根据鲸参谋平台的数据显示,今年7月份,京东奶粉市场的销量为600万,同比去年同期有所下滑,整体下降约21%;销售额为22亿,同比增长约9%。由此也…

【数学建模】数据预处理

为什么需要数据预处理 数学建模是将实际问题转化为数学模型来解决的过程,而数据预处理是数学建模中非常重要的一步。以下是为什么要进行数据预处理的几个原因: 数据质量:原始数据往往存在噪声、异常值、缺失值等问题,这些问题会对…

Qt 5.15集成Crypto++ 8.7.0(MSVC 2019)笔记

一、背景 笔者已介绍过在Qt 5.15.x中使用MinGW(8.10版本)编译并集成Crypto 8.7.0。 但是该编译出来的库(.a和.dll)不适用MSVC(2019版本)构建环境,需要重新编译(.lib或和.dll&#xf…

初步了解android如何锁键

百年三万六千日,光阴只有瞬息间。 手机下面的三个图形,正方形,园形,三角形分别的什么建?都起到什么功能? 三角形的那个叫返回键,就是可以返回你的上一个操作; 圆形是HOME键,按一下可…

【pyqt5界面化工具开发-13】QtDesigner功能择优使用

目录 0x00 前言: 一、完成基本的布局 二、其他功能的使用 三、在代码行开发 0x00 前言: QtDesigner工具的择优使用: 1、他的界面开发,是我们主要需要使用的功能 2、他的其他功能的使用,有需要就可使用&#xff…

linux中dmesg命令用法

在Linux系统中,dmesg(diagnostic message)是一个非常有用的命令行工具,用于显示和控制内核环形缓冲区中的消息。这些消息通常包含系统启动时的内核生成的信息,例如硬件设备的状态,驱动程序的加载&#xff0…

nginx请求接口转发-浏览器访问80端口,要把请求转发至8882

1、需求 浏览器访问80端口,要把请求转发至8882 2、实现 修改ngixn配置文件 ngin配置文件在nginx安装目录/nginx/conf文件夹下 cd /usr/local/nginx/confvi ngin.conf修改server配置 server {listen 80;server_name localhost;location / {proxy_pass …