天天看點

Opencv視訊讀寫視訊讀寫2 儲存視訊

視訊讀寫

在OpenCV中我們要擷取一個視訊,需要建立一個VideoCapture對象,指定你要讀取的視訊檔案:

建立讀取視訊的對象

cap = cv.VideoCapture(filepath)           

參數:

filepath: 視訊檔案路徑

視訊的屬性資訊

2.1. 擷取視訊的某些屬性,

retval = cap.get(propId)           

參數:

propId: 從0到18的數字,每個數字表示視訊的屬性

常用屬性有:

Opencv視訊讀寫視訊讀寫2 儲存視訊

2.2 修改視訊的屬性資訊

cap.set(propId              ,              value)           

參數:

proid: 屬性的索引,與上面的表格相對應

value: 修改後的屬性值

判斷圖像是否讀取成功

isornot = cap.isOpened()           

若讀取成功則傳回true,否則傳回False

擷取視訊的一幀圖像

ret, frame = cap.read()           

參數:

ret: 若擷取成功傳回True,擷取失敗,傳回False

Frame: 擷取到的某一幀的圖像

調用cv.imshow()顯示圖像,在顯示圖像時使用cv.waitkey()設定适當的持續時間,如果太低視訊會播放的非常快,如果太高就會播放的非常慢,通常情況下我們設定25ms就可以了。

最後,調用cap.realease()将視訊釋放掉

示例:

import numpy as np
import cv2 as cv
# 1.擷取視訊對象
cap = cv.VideoCapture('DOG.wmv')
# 2.判斷是否讀取成功
while(cap.isOpened()):
    # 3.擷取每一幀圖像
    ret, frame = cap.read()
    # 4. 擷取成功顯示圖像
    if ret == True:
        cv.imshow('frame',frame)
    # 5.每一幀間隔為25ms
    if cv.waitKey(25) & 0xFF == ord('q'):
        break
# 6.釋放視訊對象
cap.release()
cv.destoryAllwindows()
           

2 儲存視訊

在OpenCV中我們儲存視訊使用的是VedioWriter對象,在其中指定輸出檔案的名稱,如下所示:

建立視訊寫入的對象

out = cv2.VideoWriter(filename,fourcc, fps, frameSize)           

參數:

filename:視訊儲存的位置

fourcc:指定視訊編解碼器的4位元組代碼

fps:幀率

frameSize:幀大小

設定視訊的編解碼器,如下所示,

retval = cv2.VideoWriter_fourcc( c1, c2, c3, c4 )           

參數:

c1,c2,c3,c4: 是視訊編解碼器的4位元組代碼,在fourcc.org中找到可用代碼清單,與平台緊密相關,常用的有:

在Windows中:DIVX(.avi)

在OS中:MJPG(.mp4),DIVX(.avi),X264(.mkv)。

利用cap.read()擷取視訊中的每一幀圖像,并使用out.write()将某一幀圖像寫入視訊中。

使用cap.release()和out.release()釋放資源。

示例:

import cv2 as cv

import numpy as np

# 1. 讀取視訊

cap = cv.VideoCapture("DOG.wmv")

# 2. 擷取圖像的屬性(寬和高,),并将其轉換為整數

frame_width = int(cap.get(3))

frame_height = int(cap.get(4))

# 3. 建立儲存視訊的對象,設定編碼格式,幀率,圖像的寬高等

out = cv.VideoWriter('outpy.avi',cv.VideoWriter_fourcc('M','J','P','G'), 10, (frame_width,frame_height))

while(True):

    # 4.擷取視訊中的每一幀圖像

    ret, frame = cap.read()

    if ret == True:

        # 5.将每一幀圖像寫入到輸出檔案中

        out.write(frame)

    else:

        break

# 6.釋放資源

cap.release()

out.release()

cv.destroyAllWindows()
           

總結

讀取視訊:

讀取視訊:cap = cv.VideoCapture()

判斷讀取成功:cap.isOpened()

讀取每一幀圖像:ret,frame = cap.read()

擷取屬性:cap.get(proid)

設定屬性:cap.set(proid,value)

資源釋放:cap.release()

儲存視訊

儲存視訊: out = cv.VideoWrite()

視訊寫入:out.write()

資源釋放:out.release()

繼續閱讀