python调用opencv实现视频读写

article/2025/9/24 21:50:49

文章目录

  • 一、从文件中读取视频并播放
    • 1.1 基本API讲解
    • 1.2 python实现
  • 二、保存视频
    • 2.1 基本API讲解
    • 2.1 python实现范例

一、从文件中读取视频并播放

1.1 基本API讲解

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

  1. 创建读取视频的对象

    cap = cv.VideoCapture(filepath)
    

    参数:

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

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

    retval = cap.get(propId)
    

    参数:

    • propId: 从0到18的数字,每个数字表示视频的属性

      常用属性有:

在这里插入图片描述

2.2 修改视频的属性信息

cap.set(propId,value) 

参数:

  • proid: 属性的索引,与上面的表格相对应
  • value: 修改后的属性值
  1. 判断图像是否读取成功

    isornot = cap.isOpened()
    
    • 若读取成功则返回true,否则返回False
  2. 获取视频的一帧图像

    ret, frame = cap.read()
    

    参数:

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

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

1.2 python实现

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.1 基本API讲解

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

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

参数:

  • filename:视频保存的位置
  • fourcc:指定视频编解码器的4字节代码
  • fps:帧率
  • frameSize:帧大小
  1. 设置视频的编解码器,如下所示,

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

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

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

2.1 python实现范例

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

http://chatgpt.dhexx.cn/article/KGvL4RIt.shtml

相关文章

记一次有趣的debug,VS编译器上Debug和Realease的差异

之前自己写过一个imageread的函数,用了好久一直没问题。最近两天,同事让我realease一个项目给他,其中就包含了我自己写的imageread函数。 我的函数就长这样,不包含公司的code,不算泄密哈。 在realse之前,我…

C++语言基础篇

✅作者简介:CSDN内容合伙人,全栈领域新星创作者,阿里云专家博主,华为云云享专家博主,掘金后端评审团成员 💕前言: 学长出的这一系列专栏适合有⼀点 C 基础&#xff0c…

PCL12.1 Realease 附加依赖项

PCL12.1 Realease 附加依赖项 libboost_atomic-vc142-mt-g-x64-1_78.lib libboost_bzip2-vc142-mt-g-x64-1_78.lib libboost_chrono-vc142-mt-g-x64-1_78.lib libboost_container-vc142-mt-g-x64-1_78.lib libboost_context-vc142-mt-g-x64-1_78.lib libboost_contract-vc142-…

Vue强制刷新页面重新加载数据方法

业务场景 在管理后台执行完增删改查的操作之后,需要重新加载页面刷新数据以便页面数据的更新 实现原理 就是通过控制router-view 的显示与隐藏,来重渲染路由区域,重而达到页面刷新的效果,show -> flase -> show 具体代码…

Linux 重新加载 nginx 配置命令

1. 查找 nginx 位置 whereis nginx2. 进入 nginx 目录 cd /usr/local/nginx/sbin3. 检查 nginx 配置文件是否正确 ./nginx -t 4. 重新加载配置文件 ./nginx -s reload

IDEA 无法重新加载Maven项目

IDEA 无法重新加载Maven项目 如图: 真头疼,搞了半小时才搞明白,我的Maven版本是3.8.6,而idea版本是2020,用不了这么新版的maven。 解决方案 maven版本高于idea版本,去查找低于idea版本日期的maven或者直…

Unity架构之详解域重新加载和场景重新加载

一、unity进入运行模式包括以下主要阶段 备份当前场景:这仅在场景被修改后发生。这样当退出运行模式时,Unity 将场景恢复为运行模式开始前的状态。Domain Reload:通过重新加载脚本域来重置脚本状态。Scene Reload:通过重新加载场…

Pycharm如何重新加载

在日常工作中,我们可能会经常遇到一种情况,那就是当我们程序执行结束后,相应的项目文件并没有自动显现出来,这时为避免我们关闭Pycharm再重新打开的麻烦,我们可以使用Pycharm中的同步或者快捷键进行重新加载。 1.同步 …

Box2d源码学习十一GJK之距离的实现

本系列博客是由扭曲45原创,欢迎转载,转载时注明出处,http://blog.csdn.net/cg0206/article/details/8352227 Box2d中距离是指两个形状最近点之间的距离,主要用于形状的碰撞检测,通过GJK算法实现,在GJK中又使…

GJK算法求凸多边形之间的距离

GJK算法最初用来求三维空间中凸多面体的距离(即最近距离),也因此经常用来做碰撞检测(距离是否为0)。后被推广到n维空间中求凸包之间的距离,此处用来求二维平面上2个凸多边形的距离。 GJK算法首先要解决…

GJK算法,碰撞检测(自学笔记,侵权删)

学哔哩哔哩《看似简单的复杂问题,奇怪而优雅的解决方式(GJK算法) | Reducible》——来自博主“我最会爬惹”笔记 一、凸形和凹形的基础概念 所有图形可以分成两种:凸形和凹形,如图1.1所示。 图1.1 凸形和凹形 凸形的性…

判断两个形状是否相交(二)-GJK

判断两个形状是否相交二-GJK 原文地址一 介绍二凸多边形性质三Minkowski和四单纯形五支持函数六创建单纯形七相交检测八迭代 然后我们开始循环迭代第二次迭代第三次迭代 九检测单纯形结束语 判断两个形状是否相交(二)-GJK 原文地址 一、 介绍: GJK和SAT一样&am…

碰撞检测GJK算法论文解析一

碰撞检测GJK算法论文解析一 碰撞检测Objcet Representation And Distance1.涉及的概念2.内容详解 Preliminaries1.涉及的概念2.内容详解 碰撞检测 碰撞检测是3维游戏内必不可少的一个功能,有了碰撞检测,游戏才能显得更加真实。之前查找碰撞检测的资料&a…

GJK之判断是否相交

由于排版问题,新文章已经更新到 本文新地址 原文地址: http://www.codezealot.org/archives/88 一、 介绍: GJK和SAT一样,只适用于凸多边形。GJK更为强大的地方在于,它可以通过“支持函数”(稍后讨论)支持所有的形状。因此,和SA…

引擎开发_ 碰撞检测_GJK 算法详细介绍

概述 和SAT(分离轴定理)算法一样,GJK算法也只对凸体有效。 GJK算法的优势是:通过support函数(后面会详细讲述),从而支持任何凸体形状之间的碰撞检测;相比SAT算法,你不需要一些额外的操作&#x…

Planning-碰撞检测之GJK

原文:dyn4j:GJK (Gilbert–Johnson–Keerthi) 目录 1. Minkowski Sum(明可夫斯基和)2. Simplex3. support函数4. 构建Simplex G J K GJK GJK和 S A T SAT SAT一样用于检测凸多边形,和 S A T SAT SAT不同, G J K GJK GJK可以处理任意形状的凸多边形&#…

GJK算法

转自:http://blog.sina.com.cn/s/blog_833d50630100xw1r.html GJK算法最初用来求三维空间中凸多面体的距离(即最近距离),也因此经常用来做碰撞检测(距离是否为0)。后被推广到n维空间中求凸包之间的距离&…

碰撞检测GJK算法论文解析二

碰撞检测GJK算法论文解析二 The Theoretical Algorithm内容详解 初探The Distance Subalgorithm内容详解 Appendix Ⅱ涉及的概念内容详解 接上文,本篇文章讲解GJK算法论文的第四、第五部分前半部分,这是整个算法最为核心的部分。第四部分阐述了算法的核心…

碰撞检测GJK算法论文解析三

碰撞检测GJK算法论文解析三 再探Appendix Ⅱ内容详解 再探The Distance Subalgorithm内容详解过程1过程2过程3 这里要先纠正上篇文章的一些错误,就是上篇文章的最后其实并没有证明定理3,而只是给出了仿射集系数向量 λ \lambda λ的解的形式,…

GJK碰撞检测(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…