需要源码和视频请点赞关注收藏后评论区留言私信~~~
在实际开发过程中,很多时候希望保存一段视频,为此,OpenCV提供了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类对象等,而且这段视频既可以是摄像头视频,也可以是视频文件,下面对保存摄像头视频和保存视频文件进行讲解
下面保存一段摄像头视频
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内出现的图像数)。所谓视频处理,处理的对象就是从视频中获取的帧,而后使用图像处理的方法对获取的帧进行处理
创作不易 觉得有帮助请点赞关注收藏~~~