真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python如何使用OpenCV捕獲事件

這篇文章給大家分享的是有關(guān)python如何使用OpenCV捕獲事件的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、開州網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、開州網(wǎng)絡(luò)營銷、開州企業(yè)策劃、開州品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供開州建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

1、步驟說明

定義關(guān)鍵事件;

將包含事件的視頻片段寫入到視頻文件;

利用線程以確保在輸入流和輸出視頻剪輯文件中執(zhí)行I / O時,不會放慢主程序的速度;

利用內(nèi)置的Python數(shù)據(jù)結(jié)構(gòu),如DEQUE隊列以按順序存放關(guān)鍵幀。

2、實例

# 導(dǎo)入必要的包
from collections import deque # 導(dǎo)入隊列,F(xiàn)IFO(first in first out)先進先出原則
from threading import Thread
from queue import Queue
import time
import cv2
 
 
class KeyClipWriter:
    # bufSize 要在內(nèi)存緩沖區(qū)中緩存的最大幀數(shù)
    # timeout 超時時間
    def __init__(self, bufSize=64, timeout=1.0):
        # 存儲在內(nèi)存中要保留的最大緩沖區(qū)大小 以及睡眠超時期間
        self.bufSize = bufSize
        self.timeout = timeout
 
        # 初始化幀的緩沖區(qū)(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):
        # 更新幀緩沖區(qū)
        self.frames.appendleft(frame)
        # 如果正在記錄,將幀加入隊列
        if self.recording:
            self.Q.put(frame)
 
    def start(self, outputPath, fourcc, fps):
        # 展示正在記錄關(guān)鍵事件幀
        # 表明正在錄制,啟動視頻寫入類,初始化需要寫入視頻文件的幀隊列
        self.recording = True
        self.writer = cv2.VideoWriter(outputPath, fourcc, fps,
                                      (600,600), True)
        self.Q = Queue()
 
        # 循環(huán)遍歷所有幀,并加入隊列
        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):
        # 保持循環(huán)
        while True:
            # 如果停止了錄制,退出線程
            if not self.recording:
                return
            # 判斷隊列是否已經(jīng)沒有關(guān)鍵事件幀了
            if not self.Q.empty():
                # 獲取隊列中的下一幀并寫入視頻文件
                frame = self.Q.get()
                self.writer.write(frame)
            # 如果隊列已經(jīng)空了,sleep超時時間以不浪費cpu周期
            # 使用隊列時空閑一會兒尤其重要,隊列數(shù)據(jù)結(jié)構(gòu)是線程安全的,暗示必須在更新內(nèi)部緩沖區(qū)之前獲取鎖/信號量。
            # 如果不sleep,當(dāng)緩沖區(qū)為空時,然后寫入和更新方法將不斷為鎖而戰(zhàn)斗。相反,最好讓視頻寫入類等待一會兒,直到需要寫入文件的隊列中存在積壓的幀。
            else:
                time.sleep(self.timeout)
 
    def flush(self):
        # 通過刷新所有剩余幀來清空隊列
        while not self.Q.empty():
            frame = self.Q.get()
            self.writer.write(frame)
 
    def finish(self):
        # 表明結(jié)束錄制、加入線程
        # 刷新隊列中的所有幀到視頻文件
        # 釋放視頻寫入指針
        self.recording = False
        self.thread.join()
        self.flush()
        self.writer.release()

感謝各位的閱讀!關(guān)于“python如何使用OpenCV捕獲事件”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


文章標題:python如何使用OpenCV捕獲事件
URL網(wǎng)址:http://weahome.cn/article/jhjsdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部