opencv視頻流

1、捕獲攝像頭的視頻幀

OpenCV 提供了cv2.VideoCapture() :0為默認計算機默認攝像頭,1或者其他的選擇來更換來源

獲取過程:

????????需要先創(chuàng)建一個VideoCapture的對象,參數(shù)可以是設(shè)備的索引號,或者是一個視頻文件。設(shè)備索引號就是在指定要使用的攝像頭。一般的筆記本電腦都有內(nèi)置攝像頭。所以參數(shù)就是 0??梢酝ㄟ^設(shè)置成 1 或者其他的來選擇別的攝像頭。之后,就可以一幀一幀的捕獲視頻了。最后,一定要停止捕獲視頻。

import numpy as np

import cv2

cap = cv2.VideoCapture(0)

while(True):

????#capture frame-by-frame

????ret , frame = cap.read()# 返回一個布爾值(True/False)。如果幀讀取的是正確的, 就是 True

????#our operation on the frame come here

????gray = cv2.cvtColor(frame , cv2.COLOR_BGR2GRAY)

????#display the resulting frame

????cv2.imshow('frame',gray)

????if cv2.waitKey(1) &0xFF ==ord('q'):

????????#按q鍵退出

????????break

#when everything done , release the capture

cap.release()

cv2.destroyAllWindows()

有時 cap 可能不能成功的初始化攝像頭設(shè)備。這種情況下上面的代碼會報錯。你可以使用 cap.isOpened(),來檢查是否成功初始化了。如果返回值是True,那就沒有問題。否則就要使用函數(shù) cap.open()。

當需要同步一組攝像頭或者一個多頭的攝像頭的時候,read()方法就不適用,一般會采取grab()和retrieve()方法代替它。

cap0 = cv2.VideoCapture(0)

cap1 = cv2.VideoCapture(1)

success0 = cap0.grab()

success1 = cap1.grab()

if success0 and success1:

? ? frame0 = cap0.retrieve()

? ? frame1 = cap1.retrieve()

可以使用函數(shù) cap.get(propId) 來獲得視頻的一些參數(shù)信息。這里propId 可以是 0 到 41 之間的任何整數(shù)。每一個數(shù)代表視頻的一個屬性。其中的一些值可以使用 cap.set(propId,value) 來修改,value 就是你想要設(shè)置成的新值。

例如,我可以使用 cap.get(3) 和 cap.get(4) 來查看每一幀的寬和高。默認情況下得到的值是 640X480。但是我可以使用 ret=cap.set(3,320)和 ret=cap.set(4,240) 來把寬和高改成 320X240。

propId數(shù)字對應(yīng)表

PS:當get里邊的值不再范圍之內(nèi),即不支持所查詢的這個屬性,會返回0

2、從文件中播放視頻

把設(shè)備索引號改成文件名即可

cap=cv2.VideoCapture('filename.avi')#文件名及格式

在播放每一幀時,使用 cv2.waiKey() 設(shè)置適當?shù)某掷m(xù)時間。一般使用25ms

3、保存視頻

創(chuàng)建一個VideoWrite的對象,確定輸出文件名,指定FourCC編碼,播放頻率和幀的大小,最后是isColor標簽True為彩色。

FourCC是一個4字節(jié)碼,用來確定視頻的編碼格式。在不同的系統(tǒng),編碼格式會稍有不同。

Linux?: DIVX , XVID , MJPG , X264 , WMV1 , WMV2;XVID是最好的,MJPG是高尺寸視頻,X264得到小尺寸視頻

Windows : DIVX

fourcc也可以寫成 fourcc = cv2.VideoWriter_fourcc('I','4','2','0')這樣形式

PS:設(shè)置FourCC格式時,原文里采用了cv2.VideoWriter_fourcc()這個函數(shù),若運行程序的時候顯示這個函數(shù)不存在,可以改用了cv2.cv.CV_FOURCC這個函數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容