国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等)

這篇具有很好參考價(jià)值的文章主要介紹了OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

前言:Hello大家好,我是小哥談。OpenCV不僅能夠處理圖像,還能夠處理視頻。視頻是由大量的圖像構(gòu)成的,這些圖像是以固定的時(shí)間間隔從視頻中獲取的。這樣,就能夠使用圖像處理的方法對這些圖像進(jìn)行處理,進(jìn)而達(dá)到處理視頻的目的。要想處理視頻,需要先對視頻進(jìn)行讀取、顯示、保存等相關(guān)操作。為此,OpenCV提供了VideoCapture類和VideoWrite類的相關(guān)方法。??

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測前期回顧:

? ? ? ??史上最全OpenCV常用方法及使用說明匯總,建議收藏!

? ? ? ??OpenCV基礎(chǔ)知識(1)— OpenCV概述

? ? ? ??OpenCV基礎(chǔ)知識(2)— 圖像處理的基本操作(讀取圖像、顯示圖像、保存圖像和獲取圖像屬性)

? ? ? ??OpenCV基礎(chǔ)知識(3)— 圖像數(shù)字化基礎(chǔ)(像素、色彩空間)??????

? ? ? ??OpenCV基礎(chǔ)知識(4)— 繪制圖形(線段、矩形、圓形、多邊形和文字)

? ? ? ??OpenCV基礎(chǔ)知識(5)— 幾何變換(縮放、翻轉(zhuǎn)、旋轉(zhuǎn)和透視)

? ? ? ??OpenCV基礎(chǔ)知識(6)— 濾波器(均值濾波器、中值濾波器、高斯濾波器和雙邊濾波器)

? ? ? ??OpenCV基礎(chǔ)知識(7)— 腐蝕與膨脹

? ? ? ??OpenCV基礎(chǔ)知識(8)— 圖形檢測(圖像輪廓、輪廓擬合、Canny邊緣檢測和霍夫變換)

? ? ? ? 目錄

???1.讀取并顯示攝像頭視頻

????1.1 VideoCapture類

????1.2?如何使用VideoCapture類?

??2.播放視頻文件

????2.1 讀取并顯示視頻文件

????2.2 視頻的暫停播放和繼續(xù)播放

????2.3?獲取視頻文件的屬性

??3.保存視頻文件

????3.1?VideoWrite類

????3.2?如何使用VideoWrite類

??4.總結(jié)

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

???1.讀取并顯示攝像頭視頻

????1.1 VideoCapture類

攝像頭視頻指的是從攝像頭中實(shí)時(shí)讀取到的視頻為了讀取并顯示攝像頭視頻,OpenCV提供了VideoCapture類的相關(guān)方法,這些方法包括攝像頭的初始化方法、檢驗(yàn)攝像頭初始化是否成功的方法、從攝像頭中讀取幀的方法、關(guān)閉攝像頭的方法等。下面將依次對這些方法進(jìn)行講解。??

VideoCapture類提供了構(gòu)造方法VideoCapture(),用于完成攝像頭的初始化工作。

VideoCapture()的語法格式如下:

capture = cv2.VideoCapture(index)

參數(shù)說明:

capture:要打開的攝像頭

index:攝像頭的設(shè)備索引。當(dāng)index的值為0時(shí),表示要打開的是第1個(gè)攝像頭;對于64位的Windows10筆記本,當(dāng)index的值為0時(shí),表示要打開的是筆記本內(nèi)置攝像頭。當(dāng)index的值為1的時(shí)候,表示要打開的是第2個(gè)攝像頭;對于64位的Windows10筆記本,當(dāng)index的值為1時(shí),表示要打開的是一個(gè)連接筆記本的外置攝像頭。

為了檢驗(yàn)攝像頭初始化是否成功,VideoCapture類提供了isOpened()方法。isOpened()方法的語法格式如下所示:

retval = cv2.VideoCapture.isOpened()

參數(shù)說明:

retval:isOpened()方法的返回值。如果攝像頭初始化成功,retval的值為True;否則,retval的值為False。

說明:??????

1.視頻是由大量的圖像構(gòu)成的,把這些圖像稱作

2.攝像頭的數(shù)量及其設(shè)備索引的先后順序由操作系統(tǒng)決定,并且OpenCV沒有提供查詢攝像頭的數(shù)量及其設(shè)備索引的任何方法。

攝像頭初始化后,就可以從攝像頭中讀取幀了,為此VideoCapture類提供了read()方法。read()方法的語法格式如下:

retval,image = cv2.VideoCapture.read()

參數(shù)說明:

retval:是否讀取到幀。如果讀取到幀,retval的值為True;否則,retval的值為False。

image:讀取到的幀。因?yàn)閹傅氖菢?gòu)成視頻的圖像,所以可以把“讀取到的幀”理解為“讀取到的圖像”。

OpenCV在官網(wǎng)中特別強(qiáng)調(diào),在不需要攝像頭的時(shí),要關(guān)閉攝像頭。為此,VideoCapture類提供了release()方法,其語法格式如下:

cv2.VideoCapture.release()

????1.2?如何使用VideoCapture類?

案例1:

讀取并顯示攝像頭視頻。具體代碼如下:

import cv2

capture = cv2.VideoCapture(0) # 打開筆記本內(nèi)置攝像頭
while (capture.isOpened()): # 筆記本內(nèi)置攝像頭被打開后
    retval, image = capture.read() # 從攝像頭中實(shí)時(shí)讀取視頻
    cv2.imshow("Video", image) # 在窗口中顯示讀取到的視頻
    key = cv2.waitKey(1) # 窗口的圖像刷新時(shí)間為1毫秒
    if key == 32: # 如果按下空格鍵
        break
capture.release() # 關(guān)閉筆記本內(nèi)置攝像頭
cv2.destroyAllWindows() # 銷毀顯示攝像頭視頻的窗口

運(yùn)行效果如圖所示:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

哈哈哈哈......,差點(diǎn)截到我,拿手機(jī)擋一下。?? ?? ?? ?? ?? ??

如何關(guān)閉攝像頭呢?其實(shí)很簡單,按下空格鍵即可關(guān)閉筆記本內(nèi)置攝像頭,銷毀顯示攝像頭視頻的窗口。

當(dāng)按下空格鍵后,PyCharm會(huì)顯示如下圖所示的警告信息。

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

為了消除該警告信息,需要將上述代碼中的

capture = cv2.VideoCapture(0)

?修改為如下代碼:

capture = cv2.VideoCapture(0,cv2.CAP_DSHOW)

如果想打開的是一個(gè)連接筆記本的外置攝像頭,那么需要將上述代碼中的

capture = cv2.VideoCapture(0)

修改為如下代碼:

capture = cv2.VideoCapture(1,cv2.CAP_DSHOW)

案例1已經(jīng)成功讀取并顯示了攝像頭視頻,那么如何對這個(gè)視頻進(jìn)行處理呢?其實(shí),處理視頻所用的方法與處理圖像所用的方法是相同的。具體請看案例2。

案例2:

將攝像頭視頻由彩色視頻轉(zhuǎn)換為灰度視頻。具體代碼如下所示:

import cv2

capture = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 打開筆記本內(nèi)置攝像頭
while (capture.isOpened()): # 筆記本內(nèi)置攝像頭被打開后
    retval, image = capture.read() # 從攝像頭中實(shí)時(shí)讀取視頻
    # 把彩色視頻轉(zhuǎn)換為灰度視頻
    image_Gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    if retval == True: # 讀取到攝像頭視頻后
        cv2.imshow("Video", image) # 在窗口中顯示彩色視頻
        cv2.imshow("Video_Gray", image_Gray) # 在窗口中顯示灰度視頻
    key = cv2.waitKey(1) # 窗口的圖像刷新時(shí)間為1毫秒
    if key == 32: # 如果按下空格鍵
        break
capture.release() # 關(guān)閉筆記本內(nèi)置攝像頭
cv2.destroyAllWindows() # 銷毀顯示攝像頭視頻的窗口

運(yùn)行結(jié)果如圖所示:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

哈哈...截取到了我房間的圖片。?? ?? ?? ?? ?? ??

那么,能否通過按鍵指令,保存并顯示攝像頭某一時(shí)刻的圖像?當(dāng)然可以了!來,繼續(xù)看案例3。

案例3:

顯示并保存攝像頭某一時(shí)刻的圖像。當(dāng)按下空格鍵的時(shí)候,關(guān)閉筆記本內(nèi)置攝像頭,保存并顯示此時(shí)攝像頭視頻中的圖像。具體代碼如下:

import cv2

cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 打開筆記本內(nèi)置攝像頭
while (cap.isOpened()): # 筆記本內(nèi)置攝像頭被打開后
    ret, frame = cap.read() # 從攝像頭中實(shí)時(shí)讀取視頻
    cv2.imshow("Video", frame) # 在窗口中顯示視頻
    k = cv2.waitKey(1) # 圖像的刷新時(shí)間為1毫秒
    if k == 32: # 按下空格鍵
        cap.release() # 關(guān)閉筆記本內(nèi)置攝像頭
        cv2.destroyWindow("Video") # 銷毀名為Video的窗口
        cv2.imwrite("D:/copy.png", frame) # 保存按下空格鍵時(shí)攝像頭視頻中的圖像
        cv2.imshow('img', frame) # 顯示按下空格鍵時(shí)攝像頭視頻中的圖像
        cv2.waitKey() # 刷新圖像
        break
cv2.destroyAllWindows() # 銷毀顯示圖像的窗口

運(yùn)行效果如圖所示:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

案例3除了能夠顯示攝像頭視頻某一時(shí)刻的圖像外,還能夠把上圖保存在電腦根目錄中(可自定義保存位置)。

保存的圖像為:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

案例1、案例2、案例3都是打開筆記本的內(nèi)置攝像頭,如果要在打開筆記本內(nèi)置攝像頭的同時(shí),再打開一個(gè)連接筆記本的外置攝像頭,應(yīng)該如何實(shí)現(xiàn)呢??

案例4:

讀取并顯示兩個(gè)攝像頭視頻。具體代碼如下:

import cv2

cap_Inner = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 打開筆記本內(nèi)置攝像頭
cap_Outer = cv2.VideoCapture(1, cv2.CAP_DSHOW) # 打開一個(gè)連接筆記本的外置攝像頭
while (cap_Inner.isOpened() & cap_Outer.isOpened()): # 兩個(gè)攝像頭都被打開后
    retval, img_Inner = cap_Inner.read() # 從筆記本內(nèi)置攝像頭中實(shí)時(shí)讀取視頻
    ret, img_Outer = cap_Outer.read() # 從連接筆記本的外置攝像頭中實(shí)時(shí)讀取視頻
    # 在窗口中顯示筆記本內(nèi)置攝像頭讀取到的視頻
    cv2.imshow("Video_Inner", img_Inner)
    # 在窗口中顯示連接筆記本的外置攝像頭讀取到的視頻
    cv2.imshow("Video_Outer", img_Outer)
    key = cv2.waitKey(1) # 窗口的圖像刷新時(shí)間為1毫秒
    if key == 32: # 如果按下空格鍵
        break
cap_Inner.release() # 關(guān)閉筆記本內(nèi)置攝像頭
cap_Outer.release() # 關(guān)閉連接筆記本的外置攝像頭
cv2.destroyAllWindows() # 銷毀顯示攝像頭視頻的窗口

?運(yùn)行效果就不演示了,大家可以自己試驗(yàn)下。(我沒外置攝像頭)??


??2.播放視頻文件

VideoCapture類及其方法除了能夠讀取并顯示攝像頭視頻外,還能夠讀取并顯示視頻文件。當(dāng)窗口根據(jù)視頻文件的時(shí)長顯示視頻文件的時(shí)候,便實(shí)現(xiàn)了播放視頻文件的效果。

????2.1 讀取并顯示視頻文件

VideoCapture類的構(gòu)造方法VideoCapture()不僅能夠用于完成攝像頭的初始化工作,還能夠用于完成視頻文件的初始化工作。

當(dāng)VideoCapture()用于初始化視頻文件的時(shí)候,其語法格式如下:

video = cv2.VideoCapture(filename)

參數(shù)說明:

video:要打開的視頻

filename:打開視頻的文件名。

案例5:

讀取并顯示視頻文件。當(dāng)按下【Esc】鍵時(shí),關(guān)閉視頻文件并銷毀顯示視頻文件的窗口。就以我在港口現(xiàn)場拍攝的高風(fēng)險(xiǎn)作業(yè)視頻為例。具體代碼如下所示:

import cv2

video = cv2.VideoCapture("1.mp4") # 打開視頻文件
while (video.isOpened()): # 視頻文件被打開后
    retval, image = video.read() # 讀取視頻文件
    # 設(shè)置“Video”窗口的寬為420,高為300
    cv2.namedWindow("Video", 0)
    cv2.resizeWindow("Video", 420, 300)
    if retval == True: # 讀取到視頻文件后
        cv2.imshow("Video", image) # 在窗口中顯示讀取到的視頻文件
    else: # 沒有讀取到視頻文件
        break
    key = cv2.waitKey(1) # 窗口的圖像刷新時(shí)間為1毫秒
    if key == 27: # 如果按下Esc鍵
        break
video.release() # 關(guān)閉視頻文件
cv2.destroyAllWindows() # 銷毀顯示視頻文件的窗口

運(yùn)行效果如圖所示:?

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

說明:??????

調(diào)整waitKey()方法中的參數(shù)值可以控制視頻文件的播放速度。例如,當(dāng)cv2.waitKey(1)時(shí),視頻文件的播放速度非??欤划?dāng)cv2.waitKey(50)時(shí),就可以減緩視頻文件的播放速度。

使用圖像處理的相關(guān)方法可以把攝像頭視頻由彩色視頻轉(zhuǎn)換為灰度視頻。那么,使用相同的方法,也能夠?qū)⒁曨l文件由彩色視頻轉(zhuǎn)換為灰度視頻。

案例6:

將視頻文件由彩色視頻轉(zhuǎn)換為灰度視頻。具體代碼如下所示:

import cv2

video = cv2.VideoCapture("1.mp4") # 打開視頻文件
while (video.isOpened()): # 視頻文件被打開后
    retval, img_Color = video.read() # 讀取視頻文件
    # 設(shè)置“Video”窗口的寬為420,高為300
    cv2.namedWindow("Gray", 0)
    cv2.resizeWindow("Gray", 420, 300)
    if retval == True: # 讀取到視頻文件后
        # 把“公司宣傳.avi”由彩色視頻轉(zhuǎn)換為灰度視頻
        img_Gray = cv2.cvtColor(img_Color, cv2.COLOR_BGR2GRAY)
        cv2.imshow("Gray", img_Gray) # 在窗口中顯示讀取到的視頻文件
    else: # 沒有讀取到視頻文件
        break
    key = cv2.waitKey(1) # 窗口的圖像刷新時(shí)間為1毫秒
    if key == 27: # 如果按下Esc鍵
        break
video.release() # 關(guān)閉視頻文件
cv2.destroyAllWindows() # 銷毀顯示視頻文件的窗口

運(yùn)行效果如圖所示:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

????2.2 視頻的暫停播放和繼續(xù)播放

上述案例已經(jīng)實(shí)現(xiàn)了在窗口中播放視頻文件的效果。那么,能否在此基礎(chǔ)上,通過按鍵指令,在播放視頻的過程中,實(shí)現(xiàn)視頻的暫停播放和繼續(xù)播放呢?答案肯定是可以的了!?

案例7:

視頻的暫停播放和繼續(xù)播放。當(dāng)按下空格鍵的時(shí)候,暫停播放視頻;當(dāng)再次按下空格鍵的時(shí)候,繼續(xù)播放視頻;當(dāng)按下【Esc】鍵時(shí),關(guān)閉視頻文件并銷毀顯示視頻文件的窗口。

具體代碼如下所示:

import cv2

video = cv2.VideoCapture("1.mp4") # 打開視頻文件
while (video.isOpened()): # 視頻文件被打開后
    retval, image = video.read() # 讀取視頻文件
    # 設(shè)置“Video”窗口的寬為420,高為300
    cv2.namedWindow("Video", 0)
    cv2.resizeWindow("Video", 420, 300)
    if retval == True: # 讀取到視頻文件后
        cv2.imshow("Video", image) # 在窗口中顯示讀取到的視頻文件
    else: # 沒有讀取到視頻文件
        break
    key = cv2.waitKey(50) # 窗口的圖像刷新時(shí)間為50毫秒
    if key == 32: # 如果按下空格鍵
        cv2.waitKey(0) # 不刷新圖像,實(shí)現(xiàn)暫停效果
        continue # 再按一次空格鍵,繼續(xù)播放
    if key == 27: # 如果按下Esc鍵
        break
video.release() # 關(guān)閉視頻文件
cv2.destroyAllWindows() # 銷毀顯示視頻文件的窗口

運(yùn)行效果如圖所示:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

????2.3?獲取視頻文件的屬性

在實(shí)際開發(fā)過程中,有時(shí)候需要獲取視頻文件的屬性。為此,VideoCapture類提供了get()方法。get()方法的語法格式如下所示:

retval = cv2.VideoCapture.get(propID)

參數(shù)說明:

retval:獲取到與propID對應(yīng)的屬性值

propID:視頻文件的屬性值

VideoCapture類提供視頻文件的屬性值及其含義如下表所示:

視頻文件的屬性值 含義
cv2.CAP_PROP_POS_MSEC 視頻文件播放時(shí)的當(dāng)前位置(單位:ms)
cv2.CAP_PROP_POS_FRAMES 幀的索引,從0開始。
cv2.CAP_PROP_POS_AVI_RATIO 視頻文件的相對位置(0表示開始播放,1表示結(jié)束播放)
cv2.CAP_PROP_FRAME_WIDTH 視頻文件的幀寬度
cv2.CAP_PROP_FRAME_HEIGHT 視頻文件的幀高度
cv2.CAP_PROP_FPS 幀速率
cv2.CAP_PROP_FOURCC 用4個(gè)字符表示的視頻編碼格式
cv2.CAP_PROP_FRAME_COUNT 視頻文件的幀數(shù)
cv2.CAP_PROP_FORMAT retrieve()方法返回的Mat對象的格式
cv2.CAP_PROP_MODE 指示當(dāng)前捕獲模式的后端專用的值
cv2.CAP_PROP_CONVERT_RGB 指示是否應(yīng)將圖像轉(zhuǎn)換為RGB

說明:??????

1.視頻是由大量的、連續(xù)的圖像構(gòu)成的,把其中的每一幅圖像稱作一幀。

2.幀數(shù)指的是視頻文件中含有的圖像總數(shù),幀數(shù)越多,視頻播放時(shí)越流暢。

3.在播放視頻的過程中,把每秒顯示圖像的數(shù)量稱作幀速率(FPS,單位:幀/s)

4.幀的寬度指的是圖像在水平方向上含有的像素總數(shù)。

5.幀的高度指的是圖像在垂直方向上含有的像素總數(shù)。

案例8:

獲取并輸出視頻文件的指定屬性值。具體代碼如下:

import cv2

video = cv2.VideoCapture("1.mp4") # 打開視頻文件
fps = video.get(cv2.CAP_PROP_FPS) # 獲取視頻文件的幀速率
frame_Count = video.get(cv2.CAP_PROP_FRAME_COUNT) # 獲取視頻文件的幀數(shù)
frame_Width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH)) # 獲取視頻文件的幀寬度
frame_Height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 獲取視頻文件的幀高度
# 輸出獲取到的屬性值
print("幀速率:", fps)
print("幀數(shù):", frame_Count)
print("幀寬度:", frame_Width)
print("幀高度:", frame_Height)

?運(yùn)行效果如圖所示:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

那么,能否使得窗口在播放視頻文件的同時(shí),動(dòng)態(tài)顯示當(dāng)前視頻文件的屬性值?例如,當(dāng)前視頻播放到第幾幀,該幀對應(yīng)著視頻第幾秒等。

案例9:

動(dòng)態(tài)顯示視頻文件的屬性值。具體代碼如下所示:

import cv2

video = cv2.VideoCapture("1.mp4") # 打開視頻文件
fps = video.get(cv2.CAP_PROP_FPS) # 獲取視頻文件的幀速率
frame_Num = 1 # 用于記錄第幾幅圖像(即第幾幀),初始值為1(即第1幅圖像)
while (video.isOpened()): # 視頻文件被打開后
   retval, frame = video.read() # 讀取視頻文件
   # 設(shè)置“Video”窗口的寬為420,高為300
   cv2.namedWindow("Video", 0)
   cv2.resizeWindow("Video", 420, 300)
   if retval == True: # 讀取到視頻文件后
      # 當(dāng)前視頻播放到第幾幀
      cv2.putText(frame, "frame: " + str(frame_Num), (0, 100),
               cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 5)
      # 該幀對應(yīng)著視頻的第幾秒
      cv2.putText(frame, "second: " + str(round(frame_Num / fps, 2)) + "s",
               (0, 200), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 5)
      cv2.imshow("Video", frame) # 在窗口中顯示讀取到的視頻文件
   else: # 沒有讀取到視頻文件
      break
   key = cv2.waitKey(50) # 窗口的圖像刷新時(shí)間為50毫秒
   frame_Num += 1 #
   if key == 27: # 如果按下Esc鍵
      break
video.release() # 關(guān)閉視頻文件
cv2.destroyAllWindows() # 銷毀顯示視頻文件的窗口

運(yùn)行效果如圖所示:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測


??3.保存視頻文件

在實(shí)際開發(fā)過程中,很多時(shí)候希望保存一段視頻。為此,OpenCV提供了VideoWrite類,下面就熟悉一下VideoWrite類的常用方法。

????3.1?VideoWrite類

VideoWrite類的常用方法包括VideoWrite類的構(gòu)造方法、write()方法release()方法。其中,VideoWrite類的構(gòu)造方法用于創(chuàng)建VideoWrite類對象,其語法格式如下:

<VideoWrite object> = cv2.VideoWrite(filename,fourcc,fps,frameSize)

參數(shù)說明:

VideoWrite object:VideoWrite類對象

filename:保存視頻時(shí)的路徑(含有文件名)

fourcc:用4個(gè)字符表示的視頻編碼格式

fps:幀速率

frameSize:每一幀的大小

在OpenCV中,使用cv2.VideoWrite_fourcc()來確定視頻編碼格式。

下表列出了幾個(gè)常用的視頻編碼格式。

fourcc的值 視頻編碼格式 文件擴(kuò)展名
cv2.VideoWrite_fourcc('1','4','2','0') 未壓縮的YUV顏色編碼格式,兼容性好,但文件較大。 .avi
cv2.VideoWrite_fourcc('P','I','M','I') MPEG-1編碼格式 .avi
cv2.VideoWrite_fourcc('X','V','I','D') MPEG-4編碼格式,視頻文件的大小為平均值。 .avi
cv2.VideoWrite_fourcc('T','H','E','O') Ogg Vorbis編碼格式,兼容性差。 .ogv
cv2.VideoWrite_fourcc('F','L','V','I') Flash視頻編碼格式 .flv

????3.2?如何使用VideoWrite類

案例10:

保存一段攝像頭視頻。打開筆記本內(nèi)置攝像頭,實(shí)時(shí)讀取并顯示視頻;然后按下【Esc】鍵,關(guān)閉筆記本內(nèi)置攝像頭,銷毀顯示攝像頭視頻的窗口,并且把打開攝像頭到關(guān)閉攝像頭的這段視頻保存為PyCharm當(dāng)前項(xiàng)目路徑下的output.avi文件。具體代碼如下所示:

import cv2

capture = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 打開筆記本內(nèi)置攝像頭
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 確定視頻被保存后的編碼格式
output = cv2.VideoWriter("output.avi", fourcc, 20, (640, 480)) # 創(chuàng)建VideoWriter類對象
while (capture.isOpened()): # 筆記本內(nèi)置攝像頭被打開后
    retval, frame = capture.read() # 從攝像頭中實(shí)時(shí)讀取視頻
    if retval == True: # 讀取到攝像頭視頻后
        output.write(frame) # 在VideoWriter類對象中寫入讀取到的幀
        cv2.imshow("frame", frame) # 在窗口中顯示攝像頭視頻
    key = cv2.waitKey(1) # 窗口的圖像刷新時(shí)間為1毫秒
    if key == 27: # 如果按下Esc鍵
        break
capture.release() # 關(guān)閉筆記本內(nèi)置攝像頭
output.release() # 釋放VideoWriter類對象
cv2.destroyAllWindows() # 銷毀顯示攝像頭視頻的窗口

當(dāng)按下【Esc】鍵的時(shí)候,會(huì)在PyCharm當(dāng)前項(xiàng)目目錄下生成一個(gè)名為“output.avi”的視頻文件。雙擊該視頻文件,即可瀏覽被保存的攝像頭視頻。

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

說明:??????

如果重復(fù)運(yùn)行,新產(chǎn)生的output.avi文件會(huì)覆蓋已經(jīng)存在的output.avi文件。

上述案例錄制的視頻文件時(shí)長是由是否按下【Esc】鍵決定的,那么能否對這段時(shí)間間隔進(jìn)行設(shè)置呢?例如,打開攝像頭并顯示10s的攝像頭視頻。答案是可以的!

案例11:

保存一段時(shí)長為10s的攝像頭視頻。具體代碼如下:

import cv2

capture = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 打開筆記本內(nèi)置攝像頭
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 確定視頻被保存后的編碼格式
fps = 20 # 幀速率
# 創(chuàng)建VideoWriter類對象
output = cv2.VideoWriter("ten_Seconds.avi", fourcc, fps, (640, 480))
frame_Num = 10 * fps # 時(shí)長為10秒的攝像頭視頻含有的幀數(shù)
# 筆記本內(nèi)置攝像頭被打開且時(shí)長為10秒的攝像頭視頻含有的幀數(shù)大于0
while (capture.isOpened() and frame_Num > 0):
    retval, frame = capture.read() # 從攝像頭中實(shí)時(shí)讀取視頻
    if retval == True: # 讀取到攝像頭視頻后
        output.write(frame) # 在VideoWriter類對象中寫入讀取到的幀
        cv2.imshow("frame", frame) # 在窗口中顯示攝像頭視頻
    key = cv2.waitKey(1) # 窗口的圖像刷新時(shí)間為1毫秒
    frame_Num -= 1 # 時(shí)長為10秒的攝像頭視頻含有的幀數(shù)減少一幀
capture.release() # 關(guān)閉筆記本內(nèi)置攝像頭
output.release() # 釋放VideoWriter類對象
cv2.destroyAllWindows() # 銷毀顯示攝像頭視頻的窗口

運(yùn)行效果如圖所示:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

VideoWrite類不僅能保存攝像頭視頻,還能保存視頻文件,而且保存視頻文件與保存攝像頭的步驟是相同的。

案例12:

保存視頻文件。具體代碼如下:

import cv2

video = cv2.VideoCapture("1.mp4") # 打開視頻文件
fps = video.get(cv2.CAP_PROP_FPS) # 獲取視頻文件的幀速率
# 獲取視頻文件的幀大小
size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)),
        int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 確定視頻被保存后的編碼格式
output = cv2.VideoWriter("copy.avi", fourcc, fps, size) # 創(chuàng)建VideoWriter類對象
while (video.isOpened()): # 視頻文件被打開后
    retval, frame = video.read() # 讀取視頻文件
    if retval == True: # 讀取到視頻文件后
        output.write(frame) # 在VideoWriter類對象中寫入讀取到的幀
    else:
        break
print("公司宣傳.avi已經(jīng)保存為PyCharm當(dāng)前項(xiàng)目路徑下的copy.avi。") # 控制臺(tái)輸出提示信息
video.release() # 關(guān)閉視頻文件
output.release() # 釋放VideoWriter類對象

運(yùn)行效果如圖所示:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測

案例13:

保存視頻文件的前10s視頻。

import cv2

video = cv2.VideoCapture("1.avi") # 打開視頻文件
fps = video.get(cv2.CAP_PROP_FPS) # 獲取視頻文件的幀速率
# 獲取視頻文件的幀大小
size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)),
        int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 確定視頻被保存后的編碼格式
output = cv2.VideoWriter("ten_Seconds.avi", fourcc, fps, size) # 創(chuàng)建VideoWriter類對象
frame_Num = 10 * fps # 視頻文件的前10秒視頻含有的幀數(shù)
# 視頻文件被打開后且視頻文件的前10秒視頻含有的幀數(shù)大于0
while (video.isOpened() and frame_Num > 0):
    retval, frame = video.read() # 讀取視頻文件
    if retval == True: # 讀取到視頻文件后
        output.write(frame) # 在VideoWriter類對象中寫入讀取到的幀
    frame_Num -= 1 # 視頻文件的前10秒視頻含有的幀數(shù)減少一幀
# 控制臺(tái)輸出提示信息
print("公司宣傳.avi的前10s視頻已經(jīng)保存為PyCharm當(dāng)前項(xiàng)目路徑下的ten_Seconds.avi。")
video.release() # 關(guān)閉視頻文件
output.release() # 釋放VideoWriter類對象

?運(yùn)行效果如圖所示:

OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測


??4.總結(jié)

(1)讀取并顯示攝像頭視頻

??VideoCapture類

  • 構(gòu)造方法VideoCapture()
  • isOpened()方法
  • read()方法
  • release()方法

??如何使用VideoCapture類

  • 讀取并顯示攝像頭視頻
  • 攝像頭視頻由彩色視頻轉(zhuǎn)換為灰度視頻
  • 顯示并保存攝像頭視頻某一刻的圖像
  • 讀取并顯示兩個(gè)攝像頭視頻

(2)播放視頻文件

??讀取并顯示視頻文件

  • video = cv2.VideoCapture(filename)

??視頻的暫停播放和繼續(xù)播放

??獲取視頻文件的屬性

  • retval = cv2.VideoCapture.get(propID)

(3)保存視頻文件

??VideoWrite類

  • 構(gòu)造方法VideoWrite()
  • write()方法
  • release()方法

??如何使用VideoWrite類

  • 保存一段攝像頭視頻
  • 保存一段時(shí)長為10s的攝像頭視頻
  • 保存視頻文件
  • 保存視頻文件中的前10s視頻

    OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等),OpenCV:從入門到實(shí)戰(zhàn),opencv,人工智能,計(jì)算機(jī)視覺,python,YOLO,音視頻,目標(biāo)檢測文章來源地址http://www.zghlxwxcb.cn/news/detail-677226.html

到了這里,關(guān)于OpenCV基礎(chǔ)知識(9)— 視頻處理(讀取并顯示攝像頭視頻、播放視頻文件、保存視頻文件等)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python|OpenCV-讀取視頻,顯示視頻并保存視頻(3)

    前言 本文是該專欄的第3篇,后面將持續(xù)分享OpenCV計(jì)算機(jī)視覺的干貨知識,記得關(guān)注。 在使用OpenCV處理視頻的時(shí)候,不論是攝像頭畫面還是視頻文件,通常情況下都要使用VideoCapture類來進(jìn)行每一幀圖像的處理。對于OpenCV而言,只要使用視頻文件作為參數(shù),它就可以打開視頻文

    2024年02月11日
    瀏覽(32)
  • OpenCV實(shí)現(xiàn)視頻的讀取、顯示、保存

    OpenCV實(shí)現(xiàn)視頻的讀取、顯示、保存

    目錄 1,從文件中讀取視頻并播放 1.2代碼實(shí)現(xiàn) 1.3效果展示 2,保存視頻 2.1? ? 代碼實(shí)現(xiàn) 2.2? ?結(jié)果展示 下面將詳細(xì)介紹如何使用OpenCV實(shí)現(xiàn)視頻的讀取、顯示和保存,并解釋其原理。 視頻讀?。?使用OpenCV可以通過 cv2.VideoCapture 類來讀取視頻文件。該類提供了一系列方法用于操

    2024年02月03日
    瀏覽(91)
  • 如何使用OpenCV讀取和顯示視頻文件?

    如何使用OpenCV讀取和顯示視頻文件?

    OpenCV是一個(gè)流行的計(jì)算機(jī)視覺庫,提供了各種功能和工具來處理圖像和視頻。在本文中,我們將學(xué)習(xí)如何使用OpenCV庫來讀取和顯示視頻文件。以下是使用Python和OpenCV進(jìn)行視頻處理的簡單示例: 如何使用OpenCV讀取和顯示視頻文件? 步驟1:安裝OpenCV 首先,確保您已經(jīng)安裝了Op

    2024年02月09日
    瀏覽(29)
  • OpenCV(一)——圖像基礎(chǔ)知識

    OpenCV(一)——圖像基礎(chǔ)知識

    課程一覽: 目錄 1.數(shù)字圖像 1.1 數(shù)字圖像概念 1.2 數(shù)字圖像起源

    2024年02月11日
    瀏覽(20)
  • opencv必會(huì)基礎(chǔ)知識

    opencv必會(huì)基礎(chǔ)知識

    (1)色彩空間變換 (2)像素訪問 (3)矩陣的 + -? * / (4)基本圖形的繪制 以上的核心知識將會(huì)在接下來的部分給大家介紹清楚,并且有實(shí)戰(zhàn)代碼展示。 (1)RGB:是通過對紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,

    2024年02月03日
    瀏覽(22)
  • XML的基礎(chǔ)知識及XMl文件的創(chuàng)建/讀取/更新demo詳解

    1.什么是xml? Xml(Extensible Markup Language),可擴(kuò)展標(biāo)記語言,一種用于存儲(chǔ)數(shù)據(jù)或傳輸數(shù)據(jù)的標(biāo)記語言,由萬維網(wǎng)(W3C開發(fā))。它允許開發(fā)人員創(chuàng)建自己的標(biāo)記,且簡單易讀,易擴(kuò)展,支持標(biāo)準(zhǔn)的字符編碼,如UFT-8,UTF-16. 2. Xml文檔的基本結(jié)構(gòu) 2.1文檔聲明 ,包括文檔版本(ver

    2024年04月09日
    瀏覽(24)
  • OpenCV基礎(chǔ)知識4 — 繪制圖形

    OpenCV基礎(chǔ)知識4 — 繪制圖形

    前言: Hello大家好,我是小哥談。 OpenCV提供了許多用于繪制圖形的方法,包括繪制線段的line()方法、繪制矩形的retangle()方法、繪制圓形的circle()方法、繪制多邊形的polylines()方法和繪制文字的putText()方法。本節(jié)課將依次對上述各個(gè)方法進(jìn)行講解,并使用上述方法繪制相應(yīng)的圖

    2024年02月13日
    瀏覽(62)
  • 基于OpenCV實(shí)戰(zhàn)(基礎(chǔ)知識一)

    基于OpenCV實(shí)戰(zhàn)(基礎(chǔ)知識一)

    目錄 簡介 1.計(jì)算機(jī)眼中的圖像 2.圖片的讀取、顯示與保存 3.視頻的讀取與顯示 OpenCV是一個(gè)流行的開源計(jì)算機(jī)視覺庫,由英特爾公司發(fā)起發(fā)展。它提供了超過2500個(gè)優(yōu)化算法和許多工具包,可用于灰度、彩色、深度、基于特征和運(yùn)動(dòng)跟蹤等的圖像處理和計(jì)算機(jī)視覺應(yīng)用。OpenCV主

    2024年02月11日
    瀏覽(16)
  • OpenCV基礎(chǔ)知識(8)— 圖形檢測

    OpenCV基礎(chǔ)知識(8)— 圖形檢測

    前言: Hello大家好,我是小哥談。 圖形檢測是計(jì)算機(jī)視覺的一項(xiàng)重要功能。通過圖形檢測可以分析圖像中可能存在的形狀,然后對這些形狀進(jìn)行描繪,例如搜索并繪制圖像的邊緣,定位圖像的位置,判斷圖像中有沒有直線、有沒有圓形等。雖然圖形檢測涉及非常深?yuàn)W的數(shù)學(xué)算

    2024年02月11日
    瀏覽(35)
  • 視頻基礎(chǔ)知識(一)

    視頻碼率就是數(shù)據(jù)傳輸時(shí)單位時(shí)間傳送的數(shù)據(jù)位數(shù),一般用的單位是kbps即千位每秒。 通俗一點(diǎn)的理解就是取樣率,單位時(shí)間內(nèi)取樣率越大,精度就越高,處理出來的文件就越接近原始文件。 較低的碼率會(huì)導(dǎo)致視頻的數(shù)據(jù)量減少,從而降低視頻的質(zhì)量。視頻會(huì)出現(xiàn)壓縮失真、

    2024年02月08日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包