OpenCV保存摄像头视频和视频文件操作实战(附Python源码)

简介: OpenCV保存摄像头视频和视频文件操作实战(附Python源码)

需要源码和视频请点赞关注收藏后评论区留言私信~~~

在实际开发过程中,很多时候希望保存一段视频,为此,OpenCV提供了VideoWriter类,下面先熟悉一下里面的各种方法

一、VideoWriter类

VideoWriter类的常用方法包括它的构造方法,write方法和release方法 语法如下

VideoWriter object=cv2.VideoWriter(filename,fourcc,fps,frameSize)

filename 保存视频时的路径

fourcc 用4个字符宝石的视频编码格式

fps 帧速率

frameSize 每一帧的大小

使用cv2.VideoWriter_fourcc来确定视频编码格式

常用的视频编码格式 为了保存一段视频 还需要使用write方法 语法如下

cv2.VideoWriter.write(frame)

frame 读取到的帧

二、使用VideoWriter类实战

使用VideoWriter类保存一段视频需要经过一下几个步骤:创建VideoWriter类对象,写入读取到的帧,释放VideoWriter类对象等,而且这段视频既可以是摄像头视频,也可以是视频文件,下面对保存摄像头视频和保存视频文件进行讲解

下面保存一段摄像头视频

import cv2
capture = cv2(0, cv2.CAP_DSHOW) # 打开笔记本内置摄像头
fourcc = cv2.VideWiter_fourcc('X', 'V', 'I', 'D') # 确定视频被保存后的编码格式
output = cv2.Vidoriter("output.avi", fourcc, 20, (640, 480)) # 创建VideoWriter类对象
while (capture.isOpened()): # 笔记本内置摄像头被打开后
    retval, frame = capture.read() # 从摄像头中实时读取视频
    if retval = True: # 读取到摄像头视频后
        outputrite(frame) # 在VideoWriter类对象中写入读取到的帧
        cv2.imsw("frame", frame) # 在窗口中显示摄像头视频
    key = cv2.waitKey(1) # 窗口的图像刷新时间为1毫秒
    if key == 27: # 如果按下Esc键
        break
capture.release() # 关闭笔记本内置摄像头
output.release( 释放VideoWriter类对象
cv2.destroyAllWindows() # 销毁显示摄像头视频的窗口

下面保存一段时长为10秒的摄像头视频

import cv2
capture = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 打开笔记本内置摄像头
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 确定视频被保存后的编码格式
fps = 20 # 帧速率
# 创建VideoWriter类对象
output = cVideoWriter("ten_Seconds.avi", fourcc, fps, (640, 480))
frame_Num = 10 * fps # 时长为10秒的摄像头视频含有的帧数
# 笔记本内置摄像头被打开且时长为10秒的摄像头视频含有的帧数大于0
while (capture.isOpened() and frame_Num > 0):
    retval, frame =apture.read() # 从摄像头中实时读取视频
    if retval == True: # 读取到摄像头视频后
        output.wrirame) # 在VideoWriter类对象中写入读取到的帧
        cv2.imshow("frame", frame) # 在窗口中显示摄像头视频
    key = cv2.waitKey(1) # 窗口的图像刷新时间为1毫秒
    frame_Num -= 1 # 时长为10秒的摄像头视频含有的帧数减少一帧
capture.release() # 关闭笔记本内置摄像头
output.release() # 释放VideoWriter类对象
cv2.destroyAllWindows() # 销毁显示摄像头视频的窗口

下面保存一个视频文件 读取视频文件后再保存当当前项目路径下

部分代码如下

import cv2
video = cv2.VideoCapture("公司宣传.avi") # 打开视频文件
fps = video.get(cv2.CAP_PROP_FPS) # 获取视频文件的帧速率
# 获取视频文件的帧大小
size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)),
        int(video.gcv2.CAP_PROP_FRAME_HEIGHT)))
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 确定视频被保存后的编码格式
output = cv2("copy.avi", fourcc, fps, size) # 创建VideoWriter类对象
while (video.isOpe()): # 视频文件被打开后
    retval, frame =video.read() # 读取视频文件
    if retval == True: # 读取到视频文件后
        output.wri(rame) # 在VideoWriter类对象中写入读取到的帧
    else:
        br
print("公司宣传.avi已经保存为PyCharm当前项目路径下的copy.avi。") # 控制台输出提示信息
video.release() # 关闭视频文件
output.release() # 释放VideoWriter类对象

保存视频文件前十秒的视频

import cv2
video = cv2.VideoCapture("公司宣传.avi") # 打开视频文件
fps = video.get(cv2.CAP_PROP_FPS) # 获取视频文件的帧速率
# 获取视频文件的帧大小
size = (int(video.g(cv2.CAP_PROP_FRAME_WIDTH)),
        int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 确定视频被保存后的编码格式
output = cv2.VideoWs #频文件的前10秒视频含有的帧数
# 视频文件被打开后且视频文件的前10秒视频含有的帧数大于0
while (video.isOpene and frame_Num > 0):
    retval, fr= video.read() # 读取视频文件
    if retval == True: # 读取到视频文件后
        outpu.write(frame) # 在VideoWriter类对象中写入读取到的帧
    frame_Num -= 1 # 视频文件的前10秒视频含有的帧数减少一帧
# 控制台输出提示信息
print("公司宣传.avi的前10s视频已经保存为PyCharm当前项目路径下的ten_Seconds.avi。")
video.release() # 关频文件
output.release() # 释放VideoWriter类对象

总结

视频是由一系列连续的图像构成的,这一系列连续的图像被称作帧,帧是以固定的时间间隔从视频中获取的。因为视频播放的速度就是获取帧的速度,所以把视频播放的速度称作帧速率,其单位是帧/s(即1s内出现的图像数)。所谓视频处理,处理的对象就是从视频中获取的帧,而后使用图像处理的方法对获取的帧进行处理

创作不易 觉得有帮助请点赞关注收藏~~~

目录
打赏
0
0
0
0
194
分享
相关文章
基于mediapipe深度学习的手势数字识别系统python源码
本内容涵盖手势识别算法的相关资料,包括:1. 算法运行效果预览(无水印完整程序);2. 软件版本与配置环境说明,提供Python运行环境安装步骤;3. 部分核心代码,完整版含中文注释及操作视频;4. 算法理论概述,详解Mediapipe框架在手势识别中的应用。Mediapipe采用模块化设计,包含Calculator Graph、Packet和Subgraph等核心组件,支持实时处理任务,广泛应用于虚拟现实、智能监控等领域。
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
QQ机器人插件源码,自动回复聊天机器人,python源码分享
消息接收处理:通过Flask搭建HTTP服务接收go-cqhttp推送的QQ消息47 智能回复逻辑
基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
本内容展示了基于EM算法的高斯混合模型(GMM)聚类实现,包含完整Python代码、运行效果图及理论解析。程序使用三维数据进行演示,涵盖误差计算、模型参数更新、结果可视化等关键步骤,并附有详细注释与操作视频,适合学习EM算法与GMM模型的原理及应用。
基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行
该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。
143 6
基于Python+Vue开发的体育场馆预约管理系统源码+运行
本项目为大学生课程设计作业,采用Python和Vue技术构建了一个体育场馆预约管理系统(实现前后端分离)。系统的主要目标在于帮助学生理解和掌握Python编程知识,同时培养其项目规划和开发能力。参与该项目的学习过程,学生能够在实际操作中锻炼技能,为未来的职业发展奠定良好的基础。
117 3
基于Python+Vue开发的房产销售管理系统源码+运行
基于Python+Vue开发的房产销售管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的房产销售管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
77 2
PYTHON实战两数之和
1. 两数之和 难度:简单 收藏 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。
238 0
PYTHON实战两数之和
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
64 1
Python编程精进:正则表达式
正则表达式是一种强大的文本处理工具,用于搜索、匹配和提取模式。本文介绍了正则表达式的语法基础,如`\d`、`\w`等符号,并通过实例展示其在匹配电子邮件、验证电话号码、处理日期格式等场景中的应用。同时,文章提醒用户注意性能、编码、安全性等问题,避免常见错误,如特殊字符转义不当、量词使用错误等。掌握正则表达式能显著提升文本处理效率,但需结合实际需求谨慎设计模式。
106 2

热门文章

最新文章

推荐镜像

更多
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等