最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你如何用python操作攝像頭以及對視頻流的處理

 更新時間:2020年10月12日 14:25:17   作者:ywsydwsbn  
這篇文章主要介紹了教你如何用python操作攝像頭以及對視頻流的處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

實(shí)驗(yàn)介紹

此次實(shí)驗(yàn)幫助大家利用 OpenCV 去讀取攝像頭的視頻流,你可以直接使用筆記本本身的攝像頭,也可以用 USB 連接直接的攝像頭。如果你在操作過程中,攝像頭讀取失敗, 實(shí)驗(yàn)中還為你提供了幾個問題排查步驟。當(dāng)然,對視頻進(jìn)行操作時還需要講解視頻相關(guān)的編解碼格式以及特定幀的讀取。在實(shí)驗(yàn)的最后,還提供了 OpenCV 的項(xiàng)目實(shí)戰(zhàn):視頻錄制與視頻讀取。

知識點(diǎn)

  • 視頻錄制
  • 視頻編解碼格式
  • 視頻讀取以及特定幀的讀取

視頻錄制

使用 OpenCV 錄制視頻,主要涉及 OpenCV 的 VideoWrite 對象。錄制視頻的第一步要實(shí)例化一個 VideoCapture 對象,用于從攝像頭讀入圖片。創(chuàng)建一個 VideoCapture 對象的代碼如下:

cap = cv2.VideoCapture(0)

類 VideoCapture 的兩個常見構(gòu)造函數(shù):

<VideoCaputrue object> = cv2.VideoCapture(filename)

功能:打開視頻文件;

參數(shù)filename:視頻文件名。

<VideoCaputrue object> = cv2.VideoCapture(index)

功能:打開相機(jī)設(shè)備;

參數(shù)index:相機(jī)設(shè)備ID,當(dāng)只有一個相機(jī)時,給0即可。

OpenCV 中視頻錄制需要借助 VideoWriter 對象, 將從 VideoCapture 中讀入圖片,不斷地寫入到 VideoWrite 的數(shù)據(jù)流中。創(chuàng)建 VideoWriter對象的代碼如下:

out = cv2.VideoWriter('video_record.avi', codec, fps, frameSize)

此次實(shí)驗(yàn)選擇筆記本電腦內(nèi)置的攝像頭,從中捕獲視頻并顯示視頻流。首先實(shí)現(xiàn)捕獲一張圖片。基本思路是首先打開相機(jī),再判斷相機(jī)是否打開,相機(jī)打開成功后,捕獲一幀圖像,然后 imshow 顯示,最后關(guān)閉相機(jī)。具體代碼如下:

import cv2
cap = cv2.VideoCapture(0)
if cap.isOpened():
 ret,frame = cap.read()
 cv2.imshow('frame',frame)
 cv2.waitKey(3000)
cap.release()
cv2.destroyAllWindows()

相機(jī)捕獲的一幀圖像如圖所示:

視頻編解碼格式

在寫入視頻的時候, 我們必須指定視頻的編解碼格式,這里我們指定為 MJPG 格式。指定視頻編解碼方式為 MJPG 的代碼如下:

codec = cv2.VideoWriter_fourcc(*'MJPG')

在講解視頻的編解碼格式之前,我們先來學(xué)習(xí)一下 FourCC 。

FourCC 全稱 Four-Character Codes ,代表四字符代碼 (four character code), 它是一個 32 位的標(biāo)示符,其實(shí)就是 typedef unsigned int FOURCC 。FourCC 是一種獨(dú)立標(biāo)示視頻數(shù)據(jù)流格式的四字符代碼。

FourCC 支持的所有視頻編解碼的格式都可以在 FourCC 官網(wǎng)上查閱。

在指定視頻的編解碼格式為 MJPG 格式之后,我們還需要指定視頻的幀率跟窗口大小。指定寫入幀率為 30 以及窗口大小的代碼如下:

fps = 30.0
frameSize = (640, 480)

初始化 VideoWriter 的時候,將這些參數(shù)傳入到其中。并指定輸出視頻文件的名稱。我們將輸出視頻文件的名稱命名為 video.avi ,具體代碼如下:

out = cv2.VideoWriter('video.avi', codec, fps, frameSize)

視頻錄制演示完整代碼

接下來,就是要不斷的從 VideoCapture 中讀入圖片,然后寫入到VideoWrite 的數(shù)據(jù)流中。不斷的向視頻輸出流寫入幀圖像的代碼如下:

out.write(frame)

在視頻錄制結(jié)束后,為了節(jié)省資源,我們需要釋放已經(jīng)占用的資源,具體代碼實(shí)現(xiàn)如下:

cap.release()
out.release()

視頻錄制演示完整代碼如下:

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
codec = cv2.VideoWriter_fourcc(*'MJPG')
fps = 20.0
frameSize = (640, 480)
out = cv2.VideoWriter('video.avi', codec, fps, frameSize)
print("按鍵Q-結(jié)束視頻錄制")
while(cap.isOpened()):
 ret, frame = cap.read()
 if ret==True:
  out.write(frame)
  cv2.imshow('frame',frame)
  if cv2.waitKey(1) == ord('q'):
   break
 else:
  break
cap.release()
out.release()
cv2.destroyAllWindows()

視頻讀取以及特定幀的讀取

視頻讀取函數(shù)介紹及實(shí)現(xiàn)

讀入視頻的時候,我們?nèi)匀恍枰褂?VideoCapture 對象,只不過傳入的不再是攝像頭的 ID 了,需要改成視頻文件的路徑。讀取視頻流的時候可以逐幀讀取捕獲實(shí)現(xiàn)的圖像。此時讀入視頻流的代碼如下:

cap = cv2.VideoCapture('video.avi')

OpenCV 提供了接口 VideoWriter 用于視頻的保存,具體函數(shù)表示如下:

cap = cv2.VideoCapture('video.avi')

函數(shù)參數(shù):

  • filename:給要保存的視頻起個名字;
  • fourcc:指定視頻編解碼器的4字節(jié)代碼;
    • 【(‘P',‘I',‘M',‘1')是MPEG-1編解碼器】

    • 【(‘M',‘J',‘P','G ')是一個運(yùn)動jpeg編解碼器】

  • fps:幀率;
  • frameSize:幀大小。

從視頻文件中播放視頻,更改相機(jī)索引與視頻文件名。 在顯示幀時,選擇適當(dāng)?shù)?cv2.waitKey()時間,如果該值太小,視頻會非常快,如果它太大,視頻會很慢(這可以用來慢動作顯示視頻)。 正常情況下,25 毫秒即可。具體視頻讀取的源代碼如下:

import numpy as np
import cv2
cap = cv2.VideoCapture('video.avi')
while(True):
 ret, frame = cap.read()
 if ret:
  cv2.imshow('frame',frame)
 else:
  print("視頻讀取完畢或者視頻路徑異常")
  break
 if cv2.waitKey(25) & 0xFF == ord('q'):
  break
cap.release()
cv2.destroyAllWindows()

視頻寫入完成,命名為 video.avi ,結(jié)果展示如下:

捕獲.PNG

image4.gif

視頻特定幀的讀?。ㄍㄟ^幀數(shù)間隔截取視頻幀)

通過視頻的幀數(shù)間隔截取視頻的每一幀,自己設(shè)置幀間隔為 20 ,即每隔 20 幀截取一幀圖像,并將我們截取的每一幀保存到我們自定義的文件夾中,這里保存的文件夾為代碼存在的路徑下 capture_image 文件夾里。具體實(shí)現(xiàn)的代碼如下:

import cv2
cap = cv2.VideoCapture("video.avi")
c = 1
frameRate = 20
while(True):
	ret, frame = cap.read()
	if ret:
		if(c % frameRate == 0):
			print("開始截取視頻第:" + str(c) + " 幀")
			cv2.imwrite("./capture_image/" + str(c) + '.jpg', frame)
		c += 1
		cv2.waitKey(0)
	else:
		print("所有幀都已經(jīng)保存完成")
		break
cap.release()

運(yùn)行結(jié)果如下,將展示我們截取的視頻幀數(shù)間隔:

視頻幀截取.PNG

如圖為視頻截取的最后一幀圖像:

last_frame.jpg

注意:讀入視頻文件和保存圖片的路徑,都要使用“\\”,使用“/”或者“\”會出現(xiàn)打開文件報錯。

攝像頭讀取失敗-問題排查

如果你運(yùn)行上文的源代碼的時候,出現(xiàn)報錯。

你可以按照下面提供的思路自行檢查一下。

  • 驅(qū)動問題 有的攝像頭可能存在驅(qū)動問題,需要安裝相關(guān)驅(qū)動,或者查看攝像頭是否具有UAC免驅(qū)協(xié)議。
  • USB接口兼容性問題 USB2.0接口接了一個USB3.0的攝像頭,也是不支持的(這只針對用 USB 連接攝像頭的,用筆記本自帶的攝像頭可忽略)。
  • 設(shè)備掛載問題 攝像頭沒有被掛載,如果是虛擬機(jī)需要手動勾選設(shè)備。
  • 硬件問題 在就是檢查一下USB線跟電腦USB接口。
  • 視頻壓縮格式的問題 部分視頻壓縮格式在OpenCV中不支持。

實(shí)驗(yàn)總結(jié)

初學(xué)者可能對 OpenCV 處理會很頭暈,因?yàn)樗婕暗降暮瘮?shù)有很多,每一個函數(shù)會有不同的用法,如果要通過 OpenCV 去調(diào)用攝像頭完成任務(wù),就需要去學(xué)習(xí)這些內(nèi)容。此次實(shí)驗(yàn)從視頻錄取、視頻讀取再到視頻特定幀的讀取一步一步帶你實(shí)現(xiàn),里面對相關(guān)函數(shù)也講解的非常透徹,相關(guān)參數(shù)也進(jìn)行了說明,涉及到實(shí)踐的地方已經(jīng)幫你把相關(guān)的源代碼給出,學(xué)習(xí)不會有障礙。當(dāng)然,實(shí)驗(yàn)最后也給出了攝像頭讀取失敗問題的排查步驟,讓你在學(xué)習(xí)的過程中能夠得到滿足。

到此這篇關(guān)于教你如何用python操作攝像頭以及對視頻流的處理的文章就介紹到這了,更多相關(guān)python操作攝像頭及視頻流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3 串口接收與發(fā)送16進(jìn)制數(shù)據(jù)包的實(shí)例

    Python3 串口接收與發(fā)送16進(jìn)制數(shù)據(jù)包的實(shí)例

    今天小編就為大家分享一篇Python3 串口接收與發(fā)送16進(jìn)制數(shù)據(jù)包的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 基于Python使用永中文檔轉(zhuǎn)換服務(wù)的方式

    基于Python使用永中文檔轉(zhuǎn)換服務(wù)的方式

    這篇文章主要介紹了基于Python使用永中文檔轉(zhuǎn)換服務(wù)的方式,本文給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • python神經(jīng)網(wǎng)絡(luò)Xception模型復(fù)現(xiàn)詳解

    python神經(jīng)網(wǎng)絡(luò)Xception模型復(fù)現(xiàn)詳解

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)Xception模型復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 用OpenCV進(jìn)行年齡和性別檢測的實(shí)現(xiàn)示例

    用OpenCV進(jìn)行年齡和性別檢測的實(shí)現(xiàn)示例

    這篇文章主要介紹了用 OpenCV 進(jìn)行年齡和性別檢測的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 分享2個方便調(diào)試Python代碼的實(shí)用工具

    分享2個方便調(diào)試Python代碼的實(shí)用工具

    這篇文章主要介紹了分享方便調(diào)試Python代碼的2個實(shí)用工具,可以方便展示我們調(diào)試代碼的中間狀態(tài),提升大家的編碼效率,詳細(xì)的介紹需要的小伙伴可以參考一下下面文章內(nèi)容
    2022-05-05
  • PyTorch的nn.Module類的定義和使用介紹

    PyTorch的nn.Module類的定義和使用介紹

    在PyTorch中,nn.Module類是構(gòu)建神經(jīng)網(wǎng)絡(luò)模型的基礎(chǔ)類,所有自定義的層、模塊或整個神經(jīng)網(wǎng)絡(luò)架構(gòu)都需要繼承自這個類,本文介紹PyTorch的nn.Module類的定義和使用介紹,感興趣的朋友一起看看吧
    2024-01-01
  • python 自動化數(shù)據(jù)提取之正則表達(dá)式

    python 自動化數(shù)據(jù)提取之正則表達(dá)式

    這篇文章主要介紹了python 自動化數(shù)據(jù)提取之正則表達(dá)式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2017-01-01
  • Python如何寫入Pandas DataFrame到CSV文件

    Python如何寫入Pandas DataFrame到CSV文件

    Pandas是一個功能強(qiáng)大的Python數(shù)據(jù)分析庫,常用于處理和分析數(shù)據(jù),CSV文件是一種廣泛使用的數(shù)據(jù)交換格式,Pandas通過to_csv方法支持將DataFrame寫入CSV文件,此方法允許用戶指定分隔符、編碼和選擇性寫入特定列等
    2024-09-09
  • Tensorflow實(shí)現(xiàn)部分參數(shù)梯度更新操作

    Tensorflow實(shí)現(xiàn)部分參數(shù)梯度更新操作

    今天小編就為大家分享一篇Tensorflow實(shí)現(xiàn)部分參數(shù)梯度更新操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 使用Python編寫一個粘貼python源代碼就能運(yùn)行的工具

    使用Python編寫一個粘貼python源代碼就能運(yùn)行的工具

    以下是一個使用wxPython模塊創(chuàng)建帶有Memo(文本輸入框)和保存按鈕的GUI程序示例,點(diǎn)擊保存按鈕后將Memo內(nèi)容保存到指定路徑下的文件,并提供運(yùn)行按鈕以執(zhí)行指定的Python腳本,需要的朋友可以參考下
    2025-04-04

最新評論

疏勒县| 临清市| 宜阳县| 绥芬河市| 南江县| 永靖县| 大安市| 林甸县| 塔河县| 涿州市| 安平县| 哈巴河县| 开原市| 阿荣旗| 泽州县| 元谋县| 南阳市| 海门市| 石嘴山市| 克拉玛依市| 班玛县| 贵州省| 安吉县| 互助| 花莲市| 绥德县| 三河市| 临桂县| 财经| 奉化市| 阿克| 和平县| 定西市| 莱西市| 班戈县| 金平| 杭锦后旗| 桃江县| 梓潼县| 忻城县| 张掖市|