opencv入門系列教學(二)圖像入門:讀取、展示並保存視頻


一、從相機讀取視頻

        通常情況下,我們必須用攝像機捕捉實時畫面。讓我們從攝像頭捕捉一段視頻(我使用的是我筆記本電腦內置的網絡攝像頭) ,將其轉換成灰度視頻並顯示出來。
        要捕獲視頻,我們需要創建一個 VideoCapture 對象。它的參數可以是設備索引或視頻文件的名稱。設備索引就是指定哪個攝像頭的數字。我們可以通過傳遞1來選擇第二個相機,以此類推。在此之后,我們需要通過逐幀捕獲將視頻保存為畫面。但是在最后,不要忘記釋放被捕獲的俘虜。下面代碼就可以實現從相機中讀取視頻的操作。

import cv2 as cv

cap = cv.VideoCapture(0)
if not cap.isOpened():
    print("無法打開相機!")
    exit()
while True:
    # 逐幀捕獲
    ret, frame = cap.read()
    # 如果正確讀取幀,ret為True
    if not ret:
        print("未正確讀取視頻!")
        break
    # 我們在框架上的操作到這里
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # 顯示結果幀
    cv.imshow('視頻', gray)
    if cv.waitKey(1) == ord('q'):
        break
        # 完成所有操作后,釋放捕獲器
cap.release()
cv.destroyAllWindows()

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

二、從文件播放視頻

        它與從相機捕獲相同,只是用視頻文件名更改攝像機索引。另外,請使用適當的時間cv.waitKey() 。如果太小,則視頻將非常快,而如果太大,則視頻將變得很慢(嗯,這下你也可以用opencv實現視頻的慢動作了)。正常情況下我們選擇25毫秒就可以了。

import cv2 as cv cap = cv.VideoCapture('vtest.avi') while cap.isOpened(): ret, frame = cap.read() # 如果正確讀取幀,ret為True
    if not ret: print("未正確讀取視頻") break gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) cv.imshow('視頻', gray) if cv.waitKey(1) == ord('q'): break cap.release() cv.destroyAllWindows()

三、保存視頻

        所以我們捕捉一個視頻,一幀一幀地處理,我們想要保存這個視頻。只需使用 cv.imwrite()即可。這次我們創建一個 VideoWriter 對象。我們應該指定輸出文件名(例如: output.avi)。然后我們應該指定 FourCC 代碼。然后傳遞幀率的數量和幀大小。最后一個是顏色標志。如果為True ,編碼器為顏色幀,否則它與灰度幀一起工作。

        FourCC 是用於指定視頻編解碼器的4字節代碼它取決於計算機所在的平台。平時只需要傳遞‘XVID’就可以。代碼片段如下:

import cv2 as cv cap = cv.VideoCapture(0) # 定義編解碼器並創建VideoWriter對象
fourcc = cv.VideoWriter_fourcc(*'XVID') out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480)) while cap.isOpened(): ret, frame = cap.read() if not ret: print("無法讀取視頻!.") break frame = cv.flip(frame, 0) # 寫翻轉的框架
 out.write(frame) cv.imshow('視頻', frame) if cv.waitKey(1) == ord('q'): break
# 完成工作后釋放所有內容
cap.release() out.release() cv.destroyAllWindows()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM