官术网_书友最值得收藏!

1.3 任務(wù)2:視頻的獲取、顯示和保存

1.3.1 任務(wù)描述

基于龍芯平臺(tái),利用OpenCV和本地?cái)z像頭獲取視頻、顯示視頻和保存視頻。

1.3.2 技術(shù)準(zhǔn)備

在計(jì)算機(jī)中,視頻資源可以源自專用攝像機(jī)、網(wǎng)絡(luò)攝像頭,也可以源自本地視頻文件或圖像序列文件。視頻處理的是運(yùn)動(dòng)圖像,而不是靜止圖像。OpenCV的VideoCapture類和VideoWriter類是視頻處理中重要的類,提供了視頻處理功能,可以支持多種格式的視頻文件。

VideoCapture類是捕獲視頻對(duì)象的類,支持返回獲取的外部視頻對(duì)象。通過對(duì)返回的外部視頻對(duì)象進(jìn)行讀取,VideoWriter類可用作把視頻對(duì)象保存至本地的程序接口,完成視頻的顯示、保存操作。

視頻處理的基本操作步驟如下。

(1)以視頻文件或者攝像頭作為數(shù)據(jù)源,創(chuàng)建VideoCapture對(duì)象。

(2)調(diào)用VideoCapture對(duì)象的read()方法獲取視頻中的幀,這里每一幀都是一幅圖像。獲取視頻的流程圖如圖1-2所示。

▲圖1-2 獲取視頻的流程圖

(3)調(diào)用VideoWriter對(duì)象的write()方法將幀寫入指定的視頻文件。保存視頻的流程圖如圖1-3所示。

▲圖1-3 保存視頻的流程圖

1.3.3 任務(wù)實(shí)施

通過本地?cái)z像頭獲取視頻、顯示視頻并保存視頻的代碼如下。

import cv2
# 通過本地?cái)z像頭獲取視頻并保存至當(dāng)前文件夾
# 創(chuàng)建VideoCapture對(duì)象,視頻源為默認(rèn)攝像頭0
cap = cv2.VideoCapture(0)
# 檢查攝像頭是否成功打開
if (cap.isOpened() == False):
    print("Error ")
# 默認(rèn)分辨率取決于系統(tǒng)
# 將分辨率從float類型轉(zhuǎn)換為int類型
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
 
# 定義編解碼器并創(chuàng)建VideoWriter對(duì)象,把輸出結(jié)果存儲(chǔ)在r8c_SaveVideo.avi文件中
out = cv2.VideoWriter('Resources/r8c_SaveVideo.avi', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 35,(frame_width, frame_height))
# 循環(huán)讀取視頻幀,直到視頻結(jié)束
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
    # 跳出循環(huán)
    else:
        break
# 釋放視頻捕獲器以及視頻寫對(duì)象
cap.release()
out.release()
# 關(guān)閉所有的窗口
cv2.destroyAllWindows()

視頻獲取與顯示結(jié)果如圖1-4所示。

▲圖1-4 視頻獲取與顯示結(jié)果

主站蜘蛛池模板: 丹阳市| 方山县| 和林格尔县| 通渭县| 苍溪县| 灵山县| 陕西省| 安庆市| 婺源县| 临猗县| 洪洞县| 金塔县| 九龙城区| 城固县| 邢台市| 怀来县| 陵水| 神池县| 宁武县| 宁远县| 冕宁县| 吐鲁番市| 翁源县| 建昌县| 福海县| 宣威市| 汝城县| 全州县| 沈丘县| 遂昌县| 台中市| 朔州市| 哈尔滨市| 湟源县| 黄平县| 达尔| 静宁县| 盈江县| 博罗县| 延吉市| 屯留县|