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

Posted showswoller

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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内出现的图像数)。所谓视频处理,处理的对象就是从视频中获取的帧,而后使用图像处理的方法对获取的帧进行处理

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

以上是关于OpenCV保存摄像头视频和视频文件操作实战(附Python源码)的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV保存USB摄像头视频流,附C++和Python源代码

opencv18视频操作

OpenCV-PyQT项目实战(11)项目案例07:摄像头操作与拍摄视频

OpenCV-PyQT项目实战(11)项目案例07:摄像头操作与拍摄视频

使用opencv去操作树莓派摄像头保存图片和视频

OpenCV学习笔记2基础:读取播放保存视频