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内出现的图像数)。所谓视频处理,处理的对象就是从视频中获取的帧,而后使用图像处理的方法对获取的帧进行处理

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

相关文章
|
1天前
|
机器学习/深度学习 Python
【Python实战】——神经网络识别手写数字(三)
【Python实战】——神经网络识别手写数字
|
1天前
|
机器学习/深度学习 数据可视化 Python
【Python实战】——神经网络识别手写数字(二)
【Python实战】——神经网络识别手写数字(三)
|
1天前
|
机器学习/深度学习 数据可视化 Python
【Python实战】——神经网络识别手写数字(一)
【Python实战】——神经网络识别手写数字
|
1天前
|
计算机视觉 Python
【Python实战】——Python+Opencv是实现车牌自动识别
【Python实战】——Python+Opencv是实现车牌自动识别
|
机器学习/深度学习 数据处理 算法框架/工具
|
17天前
|
存储 人工智能 数据处理
Python:编程的艺术与科学的完美交融
Python:编程的艺术与科学的完美交融
19 1
|
4天前
|
JSON 数据格式 开发者
pip和requests在Python编程中各自扮演着不同的角色
`pip`是Python的包管理器,用于安装、升级和管理PyPI上的包;`requests`是一个HTTP库,简化了HTTP通信,支持各种HTTP请求类型及数据交互。两者在Python环境中分别负责包管理和网络请求。
18 5
|
6天前
|
存储 Python 容器
Python高级编程
Python集合包括可变的set和不可变的frozenset,用于存储无序、不重复的哈希元素。创建集合可使用{}或set(),如`my_set = {1, 2, 3, 4, 5}`。通过add()添加元素,remove()或discard()删除元素,如`my_set.remove(3)`。
|
7天前
|
测试技术 Python
Python模块化方式编程实践
Python模块化编程提升代码质量,包括:定义专注单一任务的模块;使用`import`导入模块;封装函数和类,明确命名便于重用;避免全局变量降低耦合;使用文档字符串增强可读性;为每个模块写单元测试确保正确性;重用模块作为库;定期维护更新以适应Python新版本。遵循这些实践,可提高代码可读性、重用性和可维护性。
31 2