" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Opencv?視頻讀取與寫入的實現(xiàn)示例

 更新時間:2023年08月21日 08:26:50   作者:缺點靈氣兒  
本文將介紹如何使用OpenCV進行視頻讀寫。通過閱讀本文,您將了解如何讀取視頻文件、處理視頻幀、寫入視頻文件等操作,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言 

視頻是由圖片組成的, 視頻的每一幀就是一幅圖片, 一般是30幀, 表示一秒顯示30張圖片.

  • cv2.VideoCapture可以捕獲攝像頭, 用數(shù)字來表示不同的設(shè)備, 比如0, 1
  • 如果是視頻文件, 可以直接指定路徑即可.

通過路徑獲取視頻內(nèi)容 

獲取視頻內(nèi)容

vc = cv2.VideoCapture(path)

檢查是否正確打開

vc.isOpened()  # 可以讀到內(nèi)容返回True

 循環(huán)播放

播放視頻就是不停的換圖像幀,即循環(huán)調(diào)用  vc.read()    和   cv2.imshow()

完整代碼

import cv2
# 打開視頻文件
def open_video(path):
    vc = cv2.VideoCapture(path)
    ret = vc.isOpened()  # 可以讀到內(nèi)容返回True
    # 檢查是否正確打開
    if ret:
        print("視頻打開成功")
    else:
        print("視頻打開失敗")
        return -1
    print(f"開始播放視頻:  {path.split('/').pop()},按esc鍵退出")
    # 循環(huán)讀幀播放視頻
    while ret:
        # 可以讀到內(nèi)容ret返回True
        ret, frame = vc.read()
        # 讀到最后frame就是空
        if frame is None:
            print("視頻播放完畢")
            break
        if ret:
            cv2.imshow('{}'.format(path).split('/').pop(), frame)
            # 0xFF == 27表示按esc退出鍵會退出
            if cv2.waitKey(33) & 0xFF == 27:
                break
    # 釋放視頻對象
    vc.release()
    # 關(guān)閉窗口
    cv2.destroyAllWindows()
open_video("videos/1.mp4")

從攝像頭讀取視頻數(shù)據(jù)

獲取視頻設(shè)備

cap = cv2.VideoCapture(0)

其他與直接讀取視頻一致

完整實例

import cv2
# 從攝像頭一直讀取數(shù)據(jù)
def camera():
    # 獲取視頻設(shè)備
    cap = cv2.VideoCapture(0)
    print("獲取視頻設(shè)備成功")
    ret = cap.isOpened()
    # 創(chuàng)建窗口
    cv2.namedWindow('video', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('video', 640, 480)
    print("成功創(chuàng)建窗口")
    print("開始播放來自攝像頭的視頻,按esc鍵退出)
    while ret:
        # 從攝像頭讀取視頻
        ret, frame = cap.read()
        # 將視頻幀放在窗口中顯示
        cv2.imshow('video', frame)
        # 等待鍵盤事件, 按esc鍵會退出
        if cv2.waitKey(33) & 0xFF == 27:
            break
    # 釋放攝像頭
    cap.release()
    print("攝像頭已關(guān)閉")
    # 關(guān)閉窗口
    cv2.destroyAllWindows()
camera()

錄制視頻 

VideoWriter : 參數(shù)一為輸出文件, 參數(shù)二為多媒體文件格式(VideoWriter_fourcc),參數(shù)三為幀率, 參數(shù)四為分辨率.

  • write 編碼并寫入緩存
  • release 緩存內(nèi)容寫入磁盤, 并釋放資源

用于創(chuàng)建視頻編解碼器的四字符碼(FourCC)

fourcc = cv2.VideoWriter_fourcc(*'mp4v')  

cv2.VideoWriter()

vm = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))

'output.mp4' 是輸出視頻文件的名稱,fourcc 是所選的視頻編碼器,20 是幀率,(640, 480) 是視頻的分辨率。

將視頻幀逐幀寫入視頻文件

vw.write(frame)

完整示例

import cv2
# 錄制視頻
def record_video():
    # 獲取視頻設(shè)備
    cap = cv2.VideoCapture(1)
    print("獲取視頻設(shè)備成功")
    # *mp4v就是解包操作 等同于  'm', 'p', '4', 'v'
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 用于創(chuàng)建視頻編解碼器的四字符碼(FourCC)。
    # (640, 480)表示攝像頭拍視頻, 這個大小搞錯了也不行,主要是這個分辨率.
    vw = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))
    # 'output.mp4' 是輸出視頻文件的名稱,fourcc 是所選的視頻編碼器,20 是幀率,(640, 480) 是視頻的分辨率。
    print("開始錄制來自攝像頭的視頻,按esc鍵退出")
    # 循環(huán)存幀錄制視頻
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            print('沒有接收到圖像')
            break
        vw.write(frame)  # 將視頻幀逐幀寫入視頻文件。
        cv2.imshow('frame', frame)  # 顯示錄制的幀
        if cv2.waitKey(33) & 0xFF == 27:
            break
    # 釋放攝像頭
    cap.release()
    print("攝像頭已關(guān)閉")
record_video()

 到此這篇關(guān)于Opencv 視頻讀取與寫入的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Opencv 視頻讀寫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法

    VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法

    這篇文章主要介紹了VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法,需要的朋友可以參考下
    2020-02-02
  • C++函數(shù)指針與指針函數(shù)有哪些關(guān)系和區(qū)別

    C++函數(shù)指針與指針函數(shù)有哪些關(guān)系和區(qū)別

    函數(shù)指針是一個指針變量,它可以存儲函數(shù)的地址,然后使用函數(shù)指針,這篇文章主要介紹了C++中函數(shù)指針與指針函數(shù)有哪些關(guān)系和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值
    2022-08-08
  • C++ LeetCode1812判斷國際象棋棋盤格子顏色

    C++ LeetCode1812判斷國際象棋棋盤格子顏色

    這篇文章主要為大家介紹了C++ LeetCode1812判斷國際象棋棋盤格子顏色, 有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • C語言 structural body結(jié)構(gòu)體詳解用法

    C語言 structural body結(jié)構(gòu)體詳解用法

    C 數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許您存儲不同類型的數(shù)據(jù)項,結(jié)構(gòu)用于表示一條記錄,假設(shè)您想要跟蹤圖書館中書本的動態(tài),您可能需要跟蹤每本書的下列屬性
    2021-10-10
  • 平衡二叉樹的實現(xiàn)實例

    平衡二叉樹的實現(xiàn)實例

    這篇文章主要介紹了平衡二叉樹的實現(xiàn)實例,需要的朋友可以參考下
    2014-02-02
  • C語言超詳細i講解雙向鏈表

    C語言超詳細i講解雙向鏈表

    在實際生活中,我們用到的最多的兩種鏈表結(jié)構(gòu)就是單鏈表和雙向帶頭鏈表,上一篇已經(jīng)介紹了單鏈表的實現(xiàn)以及一些應(yīng)用,接下來我為大家詳細介紹一下雙向鏈表,以及一些鏈表oj題
    2022-05-05
  • c語言讀取csv文件和c++讀取csv文件示例分享

    c語言讀取csv文件和c++讀取csv文件示例分享

    這篇文章主要介紹了c語言讀取csv文件和c++讀取csv文件示例,需要的朋友可以參考下
    2014-03-03
  • 基于MFC實現(xiàn)單個文檔的文件讀寫

    基于MFC實現(xiàn)單個文檔的文件讀寫

    這篇文章主要為大家詳細介紹了如何基于MFC實現(xiàn)單個文檔的文件讀寫功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)有一定幫助,感興趣的可以了解一下
    2022-07-07
  • C語言用Easyx繪制圍棋和象棋的棋盤

    C語言用Easyx繪制圍棋和象棋的棋盤

    這篇文章主要為大家詳細介紹了C語言用Easyx繪制圍棋和象棋的棋盤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++編寫實現(xiàn)圖書管理系統(tǒng)

    C++編寫實現(xiàn)圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++編寫實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論