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

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 視頻獲取與顯示結果

主站蜘蛛池模板: 乐至县| 东兰县| 威宁| 东平县| 北碚区| 大足县| 闻喜县| 重庆市| 临泽县| 丹凤县| 大安市| 文昌市| 丰城市| 沙坪坝区| 绥滨县| 灯塔市| 富蕴县| 泸州市| 利津县| 达拉特旗| 灵石县| 武安市| 蒙自县| 长沙市| 阜城县| 西充县| 新绛县| 南开区| 建德市| 和龙市| 凌云县| 大宁县| 宜兰县| 祁连县| 乌兰浩特市| 遵化市| 榆林市| 马关县| 蕉岭县| 蛟河市| 元阳县|