您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“基于Python怎么實(shí)現(xiàn)捕獲,播放和保存攝像頭視頻”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
要捕獲視頻,你需要?jiǎng)?chuàng)建一個(gè) VideoCapture 對象。它的參數(shù)可以是設(shè)備索引或視頻文件的名稱。所以,我們讀取視頻有兩種方式,分別是從相機(jī)中讀取視頻和從文件中讀取視頻。
對于有攝像頭的設(shè)備,例如帶攝像頭的筆記本電腦,我們可以直接調(diào)起電腦的攝像頭,讀取攝像頭的視頻流。
import cv2 as cv cap = cv.VideoCapture(0) if not cap.isOpened(): print("Cannot open camera") exit() while True: # 逐幀捕獲 ret, frame = cap.read() # 如果正確讀取幀,ret為True if not ret: break # 顯示結(jié)果幀 cv.imshow('frame', frame) if cv.waitKey(1) == ord('q'): break # 完成所有操作后,釋放捕獲器 cap.release() cv.destroyAllWindows()
這里我向 VideoCapture
對象傳入了參數(shù) 0
,表示設(shè)備索引,設(shè)備索引就是指定哪個(gè)攝像頭的數(shù)字。正常情況下,一個(gè)攝像頭會被連接(就像我的情況一樣)。所以我簡單地傳0。你可以通過傳遞1來選擇第二個(gè)相機(jī),以此類推。
cap.isOpened()
用來判斷是否捕獲到視頻。
cap.read()
返回布爾值(True/ False)。如果正確讀取了幀,它將為True。因此,你可以通過檢查此返回值來檢查視頻的結(jié)尾。
cv.imshow
方法用來顯示視頻的幀。我們播放視頻的原理就是逐幀播放。
在最后,不要忘記通過 cap.release()
釋放俘虜。
運(yùn)行這段代碼,你就可以看到一個(gè)彈窗實(shí)時(shí)地播放你電腦攝像頭中的圖像了。
與從相機(jī)捕獲相同,只是用視頻文件名更改攝像機(jī)索引。
另外,在顯示視頻時(shí),可以通過 cv.waitKey()
來控制視頻播放的速度。如果設(shè)置太小,則視頻將非常快,相當(dāng)于倍速播放;而如果太大,則視頻將變得很慢,相當(dāng)于延遲播放。正常情況下25毫秒就可以了。
import cv2 as cv cap = cv.VideoCapture('video.mp4') while cap.isOpened(): ret, frame = cap.read() # 如果正確讀取幀,ret為True if not ret: break cv.imshow('frame', frame) if cv.waitKey(1) == ord('q'): break cap.release() cv.destroyAllWindows()
運(yùn)行這段代碼,你就可以看到一個(gè)彈窗播放你選擇的視頻文件了。
從相機(jī)讀取視頻,我們可以將視頻保存到本地。我們捕捉一個(gè)視頻,一幀一幀地處理,如果我們想要保存這個(gè)視頻,非常簡單,只需使用 cv.VideoWriter()
。
cv.VideoWriter()
有5個(gè)參數(shù):
參數(shù)1:輸出文件名,例如: output.mp4。
參數(shù)2:FourCC 代碼,F(xiàn)ourCC 是用于指定視頻編解碼器的4字節(jié)代碼。
參數(shù)3:幀率的數(shù)量。
參數(shù)4:幀大小。
參數(shù)5:顏色標(biāo)志。如果為 True,正常顏色輸出,否則就是灰色圖像輸出。
關(guān)于 FourCC
與視頻格式的對照關(guān)系,我列舉了一些常見的格式:
cv2.VideoWriter_fourcc(‘P’,‘I’,‘M’,‘1’) = MPEG-1 codec
cv2.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’) = motion-jpeg codec --> mp4v
cv2.VideoWriter_fourcc(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec
cv2.VideoWriter_fourcc(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec
cv2.VideoWriter_fourcc(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec --> avi
cv2.VideoWriter_fourcc(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec
cv2.VideoWriter_fourcc(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec
cv2.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘1’) = FLV1 codec
保存視頻的代碼:
import cv2 as cv cap = cv.VideoCapture(0) # 定義編解碼器并創(chuàng)建VideoWriter對象 fourcc = cv.VideoWriter_fourcc(*'MJPG') out = cv.VideoWriter('output.mp4', fourcc, 20.0, (640, 480)) while cap.isOpened(): ret, frame = cap.read() if not ret: break frame = cv.flip(frame, 1) # 寫翻轉(zhuǎn)的框架 out.write(frame) cv.imshow('frame', frame) if cv.waitKey(1) == ord('q'): break # 完成工作后釋放所有內(nèi)容 cap.release() out.release() cv.destroyAllWindows()
運(yùn)行這段代碼,你就可以在代碼目錄下找到一個(gè) output.mp4
的視頻文件了。
上面幾段代碼中,如果想要退出視頻操作,敲擊鍵盤的 q
就可以。
“基于Python怎么實(shí)現(xiàn)捕獲,播放和保存攝像頭視頻”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。