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