首頁人工智能技術(shù)資訊正文

OpenCV讀取視頻的方法?

更新時(shí)間:2021-05-27 來源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

一. 從文件中讀取視頻并播放

在OpenCV中我們要獲取一個(gè)視頻,需要?jiǎng)?chuàng)建一個(gè)VideoCapture對象,指定你要讀取的視頻文件:


1. 創(chuàng)建讀取視頻的對象

cap = cv.VideoCapture(filepath)

參數(shù):

filepath: 視頻文件路徑

視頻的屬性信息

2.1 獲取視頻的某些屬性

retval = cap.get(propId)

參數(shù):

propId: 從0到18的數(shù)字,每個(gè)數(shù)字表示視頻的屬性


常用屬性有:

image-20191016164053661


2.2 修改視頻的屬性信息

cap.set(propId,value)

參數(shù):

proid: 屬性的索引,與上面的表格相對應(yīng)

value: 修改后的屬性值

3. 判斷圖像是否讀取成功

isornot = cap.isOpened()

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

4. 獲取視頻的一幀圖像

ret, frame = cap.read()

參數(shù):

ret: 若獲取成功返回True,獲取失敗,返回False

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

調(diào)用cv.imshow()顯示圖像,在顯示圖像時(shí)使用cv.waitkey()設(shè)置適當(dāng)?shù)某掷m(xù)時(shí)間,如果太低視頻會(huì)播放的非常快,如果太高就會(huì)播放的非常慢,通常情況下我們設(shè)置25ms就可以了。

最后,調(diào)用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()

二、保存視頻

在OpenCV中我們保存視頻使用的是VedioWriter對象,在其中指定輸出文件的名稱,如下所示:


1. 創(chuàng)建視頻寫入的對象

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

參數(shù):

filename:視頻保存的位置

fourcc:指定視頻編解碼器的4字節(jié)代碼

fps:幀率

frameSize:幀大小


2. 設(shè)置視頻的編解碼器,如下所示,

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

參數(shù):

c1,c2,c3,c4: 是視頻編解碼器的4字節(jié)代碼,在fourcc.org中找到可用代碼列表,與平臺(tái)緊密相關(guān),常用的有:

在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. 獲取圖像的屬性(寬和高,),并將其轉(zhuǎn)換為整數(shù)
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
# 3. 創(chuàng)建保存視頻的對象,設(shè)置編碼格式,幀率,圖像的寬高等
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()


總結(jié)

讀取視頻

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

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

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

獲取屬性:cap.get(proid)

設(shè)置屬性:cap.set(proid,value)

資源釋放:cap.release()


保存視頻

保存視頻: out = cv.VideoWrite()

視頻寫入:out.write()

資源釋放:out.release()



猜你喜歡:

什么是KNN算法?

什么是OCR?OCR技術(shù)詳解

深度分析box來提升檢測性能的方法

深度相機(jī)常見技術(shù):深度相機(jī)的相位求解

黑馬程序員人工智能培訓(xùn)課程

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!