基于龙芯平台,利用OpenCV和本地摄像头获取视频、显示视频和保存视频。
在计算机中,视频资源可以源自专用摄像机、网络摄像头,也可以源自本地视频文件或图像序列文件。视频处理的是运动图像,而不是静止图像。OpenCV的VideoCapture类和VideoWriter类是视频处理中重要的类,提供了视频处理功能,可以支持多种格式的视频文件。
VideoCapture类是捕获视频对象的类,支持返回获取的外部视频对象。通过对返回的外部视频对象进行读取,VideoWriter类可用作把视频对象保存至本地的程序接口,完成视频的显示、保存操作。
视频处理的基本操作步骤如下。
(1)以视频文件或者摄像头作为数据源,创建VideoCapture对象。
(2)调用VideoCapture对象的read()方法获取视频中的帧,这里每一帧都是一幅图像。获取视频的流程图如图1-2所示。
▲图1-2 获取视频的流程图
(3)调用VideoWriter对象的write()方法将帧写入指定的视频文件。保存视频的流程图如图1-3所示。
▲图1-3 保存视频的流程图
通过本地摄像头获取视频、显示视频并保存视频的代码如下。
import cv2 # 通过本地摄像头获取视频并保存至当前文件夹 # 创建VideoCapture对象,视频源为默认摄像头0 cap = cv2.VideoCapture(0) # 检查摄像头是否成功打开 if (cap.isOpened() == False): print("Error ") # 默认分辨率取决于系统 # 将分辨率从float类型转换为int类型 frame_width = int(cap.get(3)) frame_height = int(cap.get(4)) # 定义编解码器并创建VideoWriter对象,把输出结果存储在r8c_SaveVideo.avi文件中 out = cv2.VideoWriter('Resources/r8c_SaveVideo.avi', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 35,(frame_width, frame_height)) # 循环读取视频帧,直到视频结束 while True: ret, frame = cap.read() if ret == True: # 将视频帧写入文件r8c_SaveVideo.avi out.write(frame) # 显示视频帧 cv2.imshow('frame', frame) # 按Q键停止记录 if cv2.waitKey(1) & 0xFF == ord('q'): break # 跳出循环 else: break # 释放视频捕获器以及视频写对象 cap.release() out.release() # 关闭所有的窗口 cv2.destroyAllWindows()
视频获取与显示结果如图1-4所示。
▲图1-4 视频获取与显示结果