您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關python如何使用OpenCV捕獲事件的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
1、步驟說明
定義關鍵事件;
將包含事件的視頻片段寫入到視頻文件;
利用線程以確保在輸入流和輸出視頻剪輯文件中執行I / O時,不會放慢主程序的速度;
利用內置的Python數據結構,如DEQUE隊列以按順序存放關鍵幀。
2、實例
# 導入必要的包 from collections import deque # 導入隊列,FIFO(first in first out)先進先出原則 from threading import Thread from queue import Queue import time import cv2 class KeyClipWriter: # bufSize 要在內存緩沖區中緩存的最大幀數 # timeout 超時時間 def __init__(self, bufSize=64, timeout=1.0): # 存儲在內存中要保留的最大緩沖區大小 以及睡眠超時期間 self.bufSize = bufSize self.timeout = timeout # 初始化幀的緩沖區(64幀)、Q:待寫入的視頻幀、視頻寫入類、 多線程(以避免I/O延遲) # recordering boolean類型指示錄制是否已啟動 self.frames = deque(maxlen=bufSize) self.Q = None self.writer = None self.thread = None self.recording = False def update(self, frame): # 更新幀緩沖區 self.frames.appendleft(frame) # 如果正在記錄,將幀加入隊列 if self.recording: self.Q.put(frame) def start(self, outputPath, fourcc, fps): # 展示正在記錄關鍵事件幀 # 表明正在錄制,啟動視頻寫入類,初始化需要寫入視頻文件的幀隊列 self.recording = True self.writer = cv2.VideoWriter(outputPath, fourcc, fps, (600,600), True) self.Q = Queue() # 循環遍歷所有幀,并加入隊列 for i in range(len(self.frames), 0, -1): self.Q.put(self.frames[i - 1]) # 開啟一個單獨的線程寫入幀到視頻文件 self.thread = Thread(target=self.write, args=()) self.thread.daemon = True self.thread.start() def write(self): # 保持循環 while True: # 如果停止了錄制,退出線程 if not self.recording: return # 判斷隊列是否已經沒有關鍵事件幀了 if not self.Q.empty(): # 獲取隊列中的下一幀并寫入視頻文件 frame = self.Q.get() self.writer.write(frame) # 如果隊列已經空了,sleep超時時間以不浪費cpu周期 # 使用隊列時空閑一會兒尤其重要,隊列數據結構是線程安全的,暗示必須在更新內部緩沖區之前獲取鎖/信號量。 # 如果不sleep,當緩沖區為空時,然后寫入和更新方法將不斷為鎖而戰斗。相反,最好讓視頻寫入類等待一會兒,直到需要寫入文件的隊列中存在積壓的幀。 else: time.sleep(self.timeout) def flush(self): # 通過刷新所有剩余幀來清空隊列 while not self.Q.empty(): frame = self.Q.get() self.writer.write(frame) def finish(self): # 表明結束錄制、加入線程 # 刷新隊列中的所有幀到視頻文件 # 釋放視頻寫入指針 self.recording = False self.thread.join() self.flush() self.writer.release()
感謝各位的閱讀!關于“python如何使用OpenCV捕獲事件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。