<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          幾行代碼,實現(xiàn)Python捕獲、播放和保存攝像頭視頻!

          共 2907字,需瀏覽 6分鐘

           ·

          2022-04-20 19:59

          文 |?閑歡

          來源:Python 技術「ID: pythonall」

          前幾天有個讀者在粉絲群里面提了一個問題:

          Python 怎樣提高視頻清晰度和對比度?

          我之前沒有涉及到使用 Python 操作視頻這一方面,所以當時很抱歉地跟讀者朋友說暫未涉及。

          這兩天想了下,感覺應該補一下這一塊的內容,一方面是增加自己涉獵的廣度,另一方面也可以給粉絲答疑解惑。

          今天先分享一下 Python 操作視頻最基本的操作,包括讀取和播放視頻和保存視頻。

          讀取視頻

          要捕獲視頻,你需要創(chuàng)建一個 VideoCapture 對象。它的參數(shù)可以是設備索引或視頻文件的名稱。所以,我們讀取視頻有兩種方式,分別是從相機中讀取視頻和從文件中讀取視頻。

          從相機中讀取視頻

          對于有攝像頭的設備,例如帶攝像頭的筆記本電腦,我們可以直接調起電腦的攝像頭,讀取攝像頭的視頻流。

          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
          ????#?顯示結果幀
          ????cv.imshow('frame',?frame)
          ????if?cv.waitKey(1)?==?ord('q'):
          ????????break
          #?完成所有操作后,釋放捕獲器
          cap.release()
          cv.destroyAllWindows()

          這里我向 VideoCapture 對象傳入了參數(shù) 0,表示設備索引,設備索引就是指定哪個攝像頭的數(shù)字。正常情況下,一個攝像頭會被連接(就像我的情況一樣)。所以我簡單地傳0。你可以通過傳遞1來選擇第二個相機,以此類推。

          cap.isOpened() 用來判斷是否捕獲到視頻。

          cap.read() 返回布爾值(True/ False)。如果正確讀取了幀,它將為True。因此,你可以通過檢查此返回值來檢查視頻的結尾。

          cv.imshow 方法用來顯示視頻的幀。我們播放視頻的原理就是逐幀播放。

          在最后,不要忘記通過 cap.release() 釋放俘虜。

          運行這段代碼,你就可以看到一個彈窗實時地播放你電腦攝像頭中的圖像了。

          從文件中播放視頻

          與從相機捕獲相同,只是用視頻文件名更改攝像機索引。

          另外,在顯示視頻時,可以通過 cv.waitKey() 來控制視頻播放的速度。如果設置太小,則視頻將非??欤喈斢诒端俨シ?;而如果太大,則視頻將變得很慢,相當于延遲播放。正常情況下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()

          運行這段代碼,你就可以看到一個彈窗播放你選擇的視頻文件了。

          保存視頻

          從相機讀取視頻,我們可以將視頻保存到本地。我們捕捉一個視頻,一幀一幀地處理,如果我們想要保存這個視頻,非常簡單,只需使用 cv.VideoWriter()。

          cv.VideoWriter() 有5個參數(shù):

          • 參數(shù)1:輸出文件名,例如: output.mp4。
          • 參數(shù)2:FourCC 代碼,F(xiàn)ourCC 是用于指定視頻編解碼器的4字節(jié)代碼。
          • 參數(shù)3:幀率的數(shù)量。
          • 參數(shù)4:幀大小。
          • 參數(shù)5:顏色標志。如果為 True,正常顏色輸出,否則就是灰色圖像輸出。

          關于 FourCC 與視頻格式的對照關系,我列舉了一些常見的格式:

          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)
          ????#?寫翻轉的框架
          ????out.write(frame)
          ????cv.imshow('frame',?frame)
          ????if?cv.waitKey(1)?==?ord('q'):
          ????????break
          #?完成工作后釋放所有內容
          cap.release()
          out.release()
          cv.destroyAllWindows()

          運行這段代碼,你就可以在代碼目錄下找到一個 output.mp4 的視頻文件了。

          上面幾段代碼中,如果想要退出視頻操作,敲擊鍵盤的 q 就可以。

          總結

          以上就是今天要介紹的內容了,使用 python-opencv 來操作視頻還是比較簡單的。當然,你也可以在讀取或者保存視頻時對視頻進行一些處理,這個我們后續(xù)再發(fā)文介紹。

          往期推薦
          1、Python五種實用的小技巧
          2、多個Python項目怎么調用我自己的工具函數(shù)?
          3、用了HTTPS,沒想到還是被監(jiān)控了!
          4、四大游戲編程網(wǎng)站,邊玩邊學Python!
          5、Python 的 import 是怎么工作的?

          點擊關注公眾號,閱讀更多精彩內容
          瀏覽 65
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩深喉视频 | 成人伊人大香蕉 | 91视频大香蕉 | 亚洲一区二区三 | 欧美一级性爱在线观看 |