Python OpenCV獲取視頻的方法
之前有文章,使用Android平臺的OpenCV接入了視頻,控制的目標是手機的攝像頭,這是OpenCV的好處,使用OpenCV可以使用跨平臺的接口實現(xiàn)相同的功能,減少了平臺間移植的困難。正如本文后面,將使用類似的接口,從筆記本的攝像頭獲取視頻,所以,嘗試本文代碼需要有一臺有攝像頭的電腦。
不過,需要說明的的是,OpenCV的強項在于圖像相關的處理,而不是視頻的編解碼,所以,不要使用OpenCV做多余的事情,我們使用OpenCV接入視頻或者圖片的目的,是為了對視頻或圖片進行處理。
關于Python下配置OpenCV的過程,由于不能直接使用pip進行安裝,過程相對復雜一些,不過,網(wǎng)上文章很多,多查閱一些資料,需要注意的是,要清楚自己的Python的版本,Python2和Python3的配置方法不同。
本節(jié)實現(xiàn)的是使用內建攝像頭捕獲視頻,并顯示視頻的每一幀以實現(xiàn)視頻的播放。
- 創(chuàng)建攝像頭對象,指向文件
- 逐幀顯示實現(xiàn)視頻播放
下面進入我們的主題,配置好OpenCV以后,創(chuàng)建一個video_capture.py文件,內容如下:
#!/usr/bin/env python3 import cv2 #創(chuàng)建顯示視頻的窗口 cv2.namedWindow('Video') #打開攝像頭 video_capture = cv2.VideoCapture(0) #創(chuàng)建視頻寫入對象 video_writer = cv2.VideoWriter('test.avi', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), video_capture.get(cv2.CAP_PROP_FPS), (int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))) #讀取視頻幀,對視頻幀進行高斯模糊,然后寫入文件并在窗口顯示 success, frame = video_capture.read() while success and not cv2.waitKey(1) == 27: blur_frame = cv2.GaussianBlur(frame, (3, 3), 0) video_writer.write(blur_frame) cv2.imshow("Video", blur_frame) success, frame = video_capture.read() #回收資源 cv2.destroyWindow('Video') video_capture.release()
我們來仔細看一下,Python OpenCV的模塊名稱是cv2,所以我們導入模塊cv2,接下來,準備了顯示視頻幀的窗口。
獲取攝像頭視頻使用VideoCapture類,其構造參數(shù)為攝像頭的index,筆記本只有一個攝像頭,其index為0;將視頻幀寫入文件使用VideoWriter類,其構造參數(shù)分別為寫入的文件路徑名,編碼格式,幀率以及視頻尺寸,我們這里的幀率和視頻尺寸使用了攝像頭提供的參數(shù),這可以通過VideoCapture獲取。
萬事俱備,我們可以調用VideoCapture.read()按幀讀取數(shù)據(jù),每一幀視頻就是一幅圖像,我們對其進行高斯模糊,然后將其寫入文件,并顯示在窗口上。
我們在點擊Esc時會退出視頻預覽和錄制,之后銷毀窗口并釋放攝像頭。
可以看到,Python的OpenCV依然表現(xiàn)出了Python代碼的簡潔性,這為我們提供了一種開發(fā)思路,可以在研究階段使用Python,實現(xiàn)中使用C++實現(xiàn)。當然,如果對Python足夠信任,完全可以直接使用Python,Python的OpenCV只是一套接口,真正的OpenCV代碼是用C++實現(xiàn)的,其性能足夠好,Python調用C/C++代碼的效率也是不錯的。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
對python中for、if、while的區(qū)別與比較方法
今天小編就為大家分享一篇對python中for 、if、 while的區(qū)別與比較方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-0610行Python代碼實現(xiàn)Web自動化管控的示例代碼
這篇文章主要介紹了10行Python代碼實現(xiàn)Web自動化管控的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08Python實現(xiàn)監(jiān)控一個程序的運行情況
這篇文章主要為大家介紹了Python如何實現(xiàn)監(jiān)控一個程序的運行情況,然后視情況將進程殺死并重啟,文中的示例代碼簡潔易懂,需要的可以參考一下2023-05-05Python調用訊飛語音合成API接口來實現(xiàn)文字轉語音
這篇文章主要為大家介紹了Python調用訊飛語音合成API接口來實現(xiàn)文字轉語音方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04