购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 任务2:视频的获取、显示和保存

1.3.1 任务描述

基于龙芯平台,利用OpenCV和本地摄像头获取视频、显示视频和保存视频。

1.3.2 技术准备

在计算机中,视频资源可以源自专用摄像机、网络摄像头,也可以源自本地视频文件或图像序列文件。视频处理的是运动图像,而不是静止图像。OpenCV的VideoCapture类和VideoWriter类是视频处理中重要的类,提供了视频处理功能,可以支持多种格式的视频文件。

VideoCapture类是捕获视频对象的类,支持返回获取的外部视频对象。通过对返回的外部视频对象进行读取,VideoWriter类可用作把视频对象保存至本地的程序接口,完成视频的显示、保存操作。

视频处理的基本操作步骤如下。

(1)以视频文件或者摄像头作为数据源,创建VideoCapture对象。

(2)调用VideoCapture对象的read()方法获取视频中的帧,这里每一帧都是一幅图像。获取视频的流程图如图1-2所示。

▲图1-2 获取视频的流程图

(3)调用VideoWriter对象的write()方法将帧写入指定的视频文件。保存视频的流程图如图1-3所示。

▲图1-3 保存视频的流程图

1.3.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 视频获取与显示结果 dJWJjs5WaAdtf8RRerW0krwJMktEMWrXLgoZpkmiPGzC7f9jw0qU7M+x+bT8gFBN

点击中间区域
呼出菜单
上一章
目录
下一章
×