当前位置: 首页 > news >正文

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()

相关文章:

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

学习目标 掌握读取视频文件,显示视频,保存视频文件的方法 1 从文件中读取视频并播放 在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件: 创建读取视频的对象 cap cv.VideoCapt…...

Lesson5-2:OpenCV视频操作---视频追踪

学习目标 理解meanshift的原理知道camshift算法能够使用meanshift和Camshift进行目标追踪 1.meanshift 1.1原理 m e a n s h i f t meanshift meanshift算法的原理很简单。假设你有一堆点集,还有一个小的窗口,这个窗口可能是圆形的,现在你可…...

1778_树莓派系统安装

全部学习汇总: GitHub - GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. 一段视频学习教程的总结,对我来说基本上用处不大。因为我自己的树莓派简简单单安装完就开机成功了,而且实现了很多视频中介绍的功能。 …...

关闭jenkins插件提醒信息

jenkins提醒信息和安全警告可以帮助我们了解插件或者jenkins的更新情况,但是有些插件是已经不维护了,提醒却一直存在,看着糟心,就像下面的提示 1、关闭插件提醒 找到如下位置:系统管理-系统配置-管理监控配置 打开管…...

JixiPix Artista Impresso Pro for mac(油画滤镜效果软件)

JixiPix Artista Impresso pro Mac是一款专业的图像编辑软件,专为Mac用户设计。它提供了各种高质量的图像编辑工具,可以帮助您创建令人惊叹的图像。该软件具有直观的用户界面,使您可以轻松地浏览和使用各种工具。 它还支持多种文件格式&…...

机器学习之 Jupyter Notebook 使用

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…...

Unity引擎修改模型顶点色的工具

大家好,我是阿赵。   之前分享过怎样通过MaxScript在3DsMax里面修改模型的顶点色。不过由于很多时候顶点色的编辑需要根据在游戏引擎里面的实际情况和shader的情况来动态调整,所以如果能在引擎里面直接修改模型的顶点色,将会方便很多。于是…...

linux安装minio以及springboot整合使用

文章目录 1.linux安装minio2.springboot整合minio使用 1.linux安装minio 1.新建文件夹 mkdir /home/minio # 数据文件夹 mkdir /home/minio/data # 创建日志文件夹 mkdir /home/minio/log2.进入文件夹 cd /home/minio3.下载minio,链接可从官网获取 wget https://…...

javaee 事务 事务的特性 事务的并发问题 事务的隔离级别

什么是事务(Transaction) 是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,sql 能将逻辑相关的一组操作绑定在一起,以便服务器 保持数据的完整性。事务…...

Matlab怎么引入外部的latex包?Matlab怎么使用特殊字符?

Matlab怎么引入外部的latex包?Matlab怎么使用特殊字符? Matlab怎么使用特殊字符?一种是使用latex方式,Matlab支持基本的Latex字符【这里】,但一些字符需要依赖外部的包,例如“𝔼”,需…...

day-07 I/O复用(select)

一.I/O复用 (一)基于I/O复用的服务器端 1.多进程服务器 每次服务都需要创建一个进程,需要大量的运算和内存空间 2.复用 只需创建一个进程。 3.复用技术在服务器端的应用 (二)select函数实现服务器端 (…...

Glide的使用及源码分析

前言 依赖 implementation com.github.bumptech.glide:glide:4.16.0 github: GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling 基本使用 //加载url Glide.with(this) .load(url) .placeholder(R.drawable.placehol…...

外贸爬虫系统

全球智能搜索 全球智能搜索 支持全球所有国家搜索引擎,及社交平台,精准定位优质的外贸客户,免翻墙 全球任意国家地区实时采集 搜索引擎全网邮箱电话采集 社交平台一键查看采集(Facebook,Twitter,Linkedin等) 职位…...

CentOS 8 安装 Code Igniter 4

在安装好LNMP运行环境基础上,将codeigniter4文件夹移动到/var/nginx/html根目录下,浏览器地址栏输入IP/codeigniter/pulbic 一直提示: Cache unable to write to "/var/nginx/html/codeigniter/writable/cache/". 找了好久&…...

.net framework 提示安装了 但是删除面板看不到

如果你在计算机上安装了.NET Framework,但在“控制面板”中找不到.NET Framework的相关条目,可能是因为.NET Framework的某些组件或特定版本未在“程序和功能”(或旧版本的Windows中称为“程序和功能”)列表中列出。这可能是正常情…...

flask-smorest 库

flask-smorest 简介 flask-smorest: 基于Flask/Marshmallow的REST API框架 flask-smorest 是一个用于创建于数据库无关的REST API的架库。 它使用Flask作为Web服务器,并使用marsmallow对数据进行序列化和反序列化。(类似于drf) 快速入门 flask-smorest对代码应…...

android WindowManager的简单使用

<?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><uses-permission android:name"android.permis…...

Spark_Spark比mapreduce快的原因

Spark 为什么比 mapreduce 快? 最重要的3点&#xff0c; 数据缓存 : 中间结果可以缓存在内存中复用 资源管理 &#xff1a;executor task 管理&#xff0c;不同stage的task可以运行在同一个executor上 任务调度 : dag 对比多阶段mr 1.任务模型的优化&#xff08;DAG图对比…...

el-upload调用内部方法删除文件

从Element UI 的官方文档中&#xff0c; Upload 上传组组件提供了on-remove和before-remove的文件删除的钩子属性&#xff08;回调方法名&#xff09;&#xff0c;但如何调用组件删除方法&#xff08;让该方法删除本地上传文件列表以及触发这两个钩子&#xff09;并无相关说明。…...

无涯教程-JavaScript - CUBEKPIMEMBER函数

描述 该函数返回关键绩效指标(KPI)属性,并在单元格中显示KPI名称。 语法 CUBEKPIMEMBER (connection, kpi_name, kpi_property, [caption])争论 Argument描述Required/OptionalconnectionName of the connection to the cube - A text stringRequiredkpi_nameName of the K…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...