溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用python?opencv庫(kù)玩轉(zhuǎn)視頻幀率

發(fā)布時(shí)間:2022-04-26 16:43:24 來(lái)源:億速云 閱讀:448 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇“如何使用python opencv庫(kù)玩轉(zhuǎn)視頻幀率”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“如何使用python opencv庫(kù)玩轉(zhuǎn)視頻幀率”文章吧。

    需求背景

    在很多時(shí)候我們需要抽取視頻的某一幀做一些分析或修改等;比如筆者需求就是判斷一個(gè)人在該視頻中出現(xiàn)的頻率,以判斷他是否是這段視頻的主角;

    關(guān)于opencv

    OpenCV 是 Intel 開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù) (Computer Version) 。它由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法。

    OpenCV 擁有包括 300 多個(gè) C 函數(shù)的跨平臺(tái)的中、高層 API 。它不依賴于其它的外部庫(kù) —— 盡管也可以使用某些外部庫(kù)。 OpenCV 對(duì)非商業(yè)應(yīng)用和商業(yè)應(yīng)用都是免費(fèi) 的

    。同時(shí) OpenCV 提供了對(duì)硬件的訪問(wèn),可以直接訪問(wèn)攝像頭,并且 opencv 還提供了一個(gè)簡(jiǎn)單的 GUI(graphics user interface) 系統(tǒng) :highgui 。 我們就通過(guò) OpenCV 提供的一些方法來(lái)構(gòu)造出這個(gè)人臉檢測(cè) ( face detection ) 程序來(lái)。

    安裝opencv

    pip install opencv-python

    用opencv按一定間隔截取視頻幀,并保存為圖片。

    這個(gè)例子使用python編程:

    代碼:

    # -*- coding:utf8 -*-
    import cv2
    import os
    import shutil
    def VideoExtract(filename, count=600):
        '''
        :param filename: 視頻文件路徑
        :param count: 保存圖片的幀率間隔
        :return:
        '''
        # 保存圖片的路徑
        savedpath = filename.split('.')[0] + '/'
        isExists = os.path.exists(savedpath)
        if not isExists:
            os.makedirs(savedpath)
            print('path of %s is build' % (savedpath))
        else:
            shutil.rmtree(savedpath)
            os.makedirs(savedpath)
            print('path of %s already exist and rebuild' % (savedpath))
        # 開(kāi)始讀視頻
        videoCapture = cv2.VideoCapture(filename)
        i = 0
        j = 0
        while True:
            success, frame = videoCapture.read()
            i += 1
            if (i % count == 0):
                # 保存圖片
                j += 1
                savedname = filename.split('.')[0] + '_' + str(j) + '_' + str(i) + '.jpg'
                cv2.imwrite(savedpath + savedname, frame)
                print('image of %s is saved' % (savedname))
            if not success:
                break

    運(yùn)行完成后在生成的圖片文件夾中會(huì)寫(xiě)入很多圖片,也就是我們剛剛每個(gè)count幀抽出的畫(huà)面

    根據(jù)這個(gè)抽幀情況來(lái)看該視頻主角應(yīng)該就是TRUMP了;

    抽幀之前當(dāng)然要做一些視頻屬性的判斷,如視頻時(shí)長(zhǎng)、視頻大小等

    cap = cv2.VideoCapture(video_name)
    # 幀率
    fps = int(round(cap.get(cv2.CAP_PROP_FPS)))
    # 分辨率-寬度
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    # 分辨率-高度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    # 總幀數(shù)
    frame_counter = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    cap.release()
    cv2.destroyAllWindows()
    # 時(shí)長(zhǎng),單位s
    duration = frame_counter / fps

    opencv-python獲取視頻相關(guān)信息

    以下是opencv-python可以獲取視頻的相關(guān)信息,可以通過(guò)從0開(kāi)始的序號(hào)獲取

    CV_CAP_PROP_POS_MSEC 視頻文件的當(dāng)前位置(以毫秒為單位)或視頻捕獲時(shí)間戳。

    CV_CAP_PROP_POS_FRAMES 接下來(lái)要解碼/捕獲的幀的基于0的索引。

    CV_CAP_PROP_POS_AVI_RATIO 視頻文件的相對(duì)位置:0 - 電影的開(kāi)始,1 - 電影的結(jié)尾。

    CV_CAP_PROP_FRAME_WIDTH 視頻流中幀的寬度。

    CV_CAP_PROP_FRAME_HEIGHT 視頻流中幀的高度。

    CV_CAP_PROP_FPS 幀速率。

    CV_CAP_PROP_FOURCC 編解碼器的4字符代碼。

    CV_CAP_PROP_FRAME_COUNT 視頻文件中的幀數(shù)。

    CV_CAP_PROP_FORMAT 返回的Mat對(duì)象的格式 retrieve() 。

    CV_CAP_PROP_MODE 指示當(dāng)前捕獲模式的特定于后端的值。

    CV_CAP_PROP_BRIGHTNESS 圖像的亮度(僅適用于相機(jī))。

    CV_CAP_PROP_CONTRAST 圖像對(duì)比度(僅適用于相機(jī))。

    CV_CAP_PROP_SATURATION 圖像的飽和度(僅適用于相機(jī))。

    CV_CAP_PROP_HUE 圖像的色調(diào)(僅適用于相機(jī))。

    CV_CAP_PROP_GAIN 圖像的增益(僅適用于相機(jī))。

    CV_CAP_PROP_EXPOSURE 曝光(僅適用于相機(jī))。

    CV_CAP_PROP_CONVERT_RGB 布爾標(biāo)志,指示是否應(yīng)將圖像轉(zhuǎn)換為RGB。

    CV_CAP_PROP_WHITE_BALANCE_U 白平衡設(shè)置的U值(注意:目前僅支持DC1394 v 2.x后端)

    CV_CAP_PROP_WHITE_BALANCE_V 白平衡設(shè)置的V值(注意:目前僅支持DC1394 v 2.x后端)

    CV_CAP_PROP_RECTIFICATION 立體攝像機(jī)的整流標(biāo)志(注意:目前僅支持DC1394 v 2.x后端)

    CV_CAP_PROP_ISO_SPEED攝像機(jī) 的ISO速度(注意:目前僅支持DC1394 v 2.x后端)

    CV_CAP_PROP_BUFFERSIZE 存儲(chǔ)在內(nèi)部緩沖存儲(chǔ)器中的幀數(shù)(注意:目前僅支持DC1394 v 2.x后端)

    以上就是關(guān)于“如何使用python opencv庫(kù)玩轉(zhuǎn)視頻幀率”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI