計算機視覺cv2入門之視頻處理

????????在我們進行計算機視覺任務時,經常會對視頻中的圖像進行操作,這里我來給大家分享一下,cv2對視頻文件的操作方法。這里我們主要介紹cv2.VideoCapture函數的基本使用方法。

cv2.VideoCapture函數

當我們在使用cv2.VideoCapture函數時,我們通常使用輪詢的方式,即:

while True:if condition1:do somethingif condition2:break...

更一般化的是?

import cv2
#這里是獲取實時視頻源,如果是讀取已有視頻文件cap=cv2.VideoCapture(filename='')
cap=cv2.VideoCapture(index=0)
if cap.isOpened():while True:ret,frame=cap.read()#...#... 針對視頻中的每一幀圖像的其他操作#....if not ret:breakcv2.imshow('test',frame)key=cv2.waitKey(1)if key==27:#置頂一個按鍵來結束循環,這里使用esc健的ASCII碼breakcap.release()cv2.destroyAllWindows()
else:print('攝像頭未打開')

初始化

? ? ? ? 視頻文件

????????如果你需要處理的是已有的視頻文件,而不是打開攝像頭捕獲的實時視頻流,那么只需要傳入filename即可。apiPerference是可選參數主要用來指定視頻捕獲的后端,即使用哪種頂層API來讀取視頻流或攝像頭,默認值是cv2.CAP_ANY由opencv自動選擇

import cv2
'''
filename:視頻文件路徑 .mp4
apiPerference:指定視頻捕獲的后端(即使用哪種底層API來讀取視頻流或攝像頭)apiPerference參數常用flag:
cv2.CAP_ANY:	自動選擇默認后端(OpenCV自行決定)跨平臺
cv2.CAP_ANDROID:  使用Android的Camera2 API
cv2.CAP_DSHOW:	使用DirectShow(Windows專用)
cv2.CAP_MSMF:    使用Microsoft Media Foundation(Windows 10+)
cv2.CAP_V4L2:    使用Video4Linux2(Linux專用)Linux
cv2.CAP_FFMPEG:	 使用FFmpeg解碼視頻文件跨平臺(需安裝 FFmpeg)
cv2.CAP_GSTREAMER:	使用 GStreamer(Linux常用)
cv2.CAP_OPENNI:	用于深度攝像頭(如Kinect)特定設備
'''
cap=cv2.VideoCapture(r'test.mp4')

實時視頻流?

????????如果你處理的是實時視頻流,那么需要設置index參數,不使用外接設備時index一般都設置為apiPerference是可選參數主要用來指定視頻捕獲的后端,即使用哪種頂層API來讀取視頻流或攝像頭,默認值是cv2.CAP_ANY由opencv自動選擇

import cv2
'''
index:0或1,0是電腦內置攝像頭,1是外接攝像頭,沒有外接攝像頭仍然設置Index=1的話不會報錯,只是代碼不運行
apiPerference:指定視頻捕獲的后端(即使用哪種底層API來讀取視頻流或攝像頭)apiPerference參數常用flag:
cv2.CAP_ANY:	自動選擇默認后端(OpenCV自行決定)跨平臺
cv2.CAP_ANDROID:  使用Android的Camera2 API
cv2.CAP_DSHOW:	使用DirectShow(Windows專用)
cv2.CAP_MSMF:    使用Microsoft Media Foundation(Windows 10+)
cv2.CAP_V4L2:    使用Video4Linux2(Linux專用)Linux
cv2.CAP_FFMPEG:	 使用FFmpeg解碼視頻文件跨平臺(需安裝 FFmpeg)
cv2.CAP_GSTREAMER:	使用 GStreamer(Linux常用)
cv2.CAP_OPENNI:	用于深度攝像頭(如Kinect)特定設備
'''
cap=cv2.VideoCapture(index=1,apiPreference=cv2.CAP_ANY)

?常用屬性

cap.isOpened()

檢查視頻源是否打開,返回值為True 或False

import cv2
cap=cv2.VideoCapture(index=0,apiPreference=cv2.CAP_MSMF)
if cap.isOpened():print('攝像頭已打開')while True:ret,frame=cap.read()cv2.imshow('test',frame)key=cv2.waitKey(1)if key==27:#按下esc健退出breakcap.release()cv2.destroyAllWindows()
else:print('攝像頭未打開')

cap.read()?

? ? ? ? 用來讀取視頻中的下一幀,返回值為(ret,frame) ret為是否成功,frame為圖像數據

????????cap.read()是我們處理視頻文件中最關鍵的函數,如果沒有這一步,那么根本無法處理視頻文件中的圖像。

import cv2
cap=cv2.VideoCapture(index=0,apiPreference=cv2.CAP_MSMF)
if cap.isOpened():print('攝像頭已打開')while True:ret,frame=cap.read()if not ret:breakcv2.imshow('test',frame)key=cv2.waitKey(1)if key==27:#按下esc健退出breakcap.release()cv2.destroyAllWindows()
else:print('攝像頭未打開')

cap.release()?

????????用來釋放視頻源,出現在cv2.destroyAllWindows()前。

import cv2
#這里是獲取實時視頻源,如果是讀取已有視頻文件cap=cv2.VideoCapture(filename='')
cap=cv2.VideoCapture(index=0)
if cap.isOpened():while True:ret,frame=cap.read()#...#...#....cv2.imshow('test',frame)key=cv2.waitKey(1)if key==27:#設定一個按鍵來結束循環,這里使用esc健的ASCII碼breakcap.release()cv2.destroyAllWindows()
else:print('攝像頭未打開')

視頻屬性控制?

?cap.get(propId)

? ? ? ? ?用來獲取當前視頻的屬性值,比如幀寬,高,FPS等。

????????這里我們以獲取當前幀率并標記在窗口內為例:

fps=cv2.get(cv2.CAP_PROP_FPS)

????????fps的類型為Float

import cv2
#這里是獲取實時視頻源,如果是讀取已有視頻文件cap=cv2.VideoCapture(filename='')
cap=cv2.VideoCapture(index=0)
if cap.isOpened():while True:ret,frame=cap.read()fps=cap.get(cv2.CAP_PROP_FPS)#...#...#....cv2.putText(img=frame,text=f'fps:{fps}',org=(50,50),fontFace=1,fontScale=3,color=(255,0,0))cv2.imshow('test',frame)key=cv2.waitKey(1)if key==27:#設定一個按鍵來結束循環關閉攝像頭,這里使用esc健的ASCII碼breakcap.release()cv2.destroyAllWindows()
else:print('攝像頭未打開')

最后,我將所有的本文所有的要點都總結在了下方這個表格里。

參數/方法????說明??
??初始化??
cap=cv2.VideoCapture()創建視頻捕獲對象,參數可以是設備索引(攝像頭)或視頻文件路徑。
??常用屬性??
cap.isOpened()檢查視頻源是否成功打開,返回?True/False
cap.read()讀取下一幀,返回?(ret, frame)ret?為是否成功,frame?為圖像數據。
cap.release()釋放視頻源。
??視頻屬性控制??
cap.get(propId)獲取視頻屬性值(如幀寬、高、FPS 等),propId?為屬性標識。
cap.set(propId, value)設置視頻屬性值(部分屬性可修改)。
??常用屬性標識(propId)??
cv2.CAP_PROP_FRAME_WIDTH幀的寬度(像素)。
cv2.CAP_PROP_FRAME_HEIGHT幀的高度(像素)。
cv2.CAP_PROP_FPS視頻的幀率(Frames Per Second)。
cv2.CAP_PROP_FRAME_COUNT視頻的總幀數(僅對文件有效)。
cv2.CAP_PROP_POS_MSEC當前幀的時間戳(毫秒,僅對文件有效)。
cv2.CAP_PROP_POS_FRAMES當前幀的索引(從 0 開始)。
??其他方法??
cap.grab()快速抓取下一幀(不解碼),通常與?cap.retrieve()?配合使用。
cap.retrieve()解碼并返回由?grab()?抓取的幀。
cap.getBackendName()返回當前使用的后端名稱(如?FFMPEGDSHOW)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902563.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902563.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902563.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux之徹底掌握防火墻-----安全管理詳解

—— 小 峰 編 程 目錄: 一、防火墻作用 二、防火墻分類 1、邏輯上劃分:大體分為 主機防火墻 和 網絡防火墻 2、物理上劃分: 硬件防火墻 和 軟件防火墻 三、硬件防火墻 四、軟件防火墻 五、iptables 1、iptables的介紹 2、netfilter/…

python項目實戰-后端個人博客系統

本文分享一個基于 Flask 框架開發的個人博客系統后端項目,涵蓋用戶注冊登錄、文章發布、分類管理、評論功能等核心模塊。適合初學者學習和中小型博客系統開發。 一、項目結構 blog │ app.py │ forms.py │ models.py │ ├───instance │ blog.d…

Unity 接入阿里的全模態大模型Qwen2.5-Omni

1 參考 根據B站up主陰沉的怪咖 開源的項目的基礎上修改接入 AI二次元老婆開源項目地址(unity-AI-Chat-Toolkit): Github地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit Gitee地址:https://gitee.com/DammonSpace/unity-ai-chat-too…

第十五屆藍橋杯 2024 C/C++組 合法密碼

目錄 題目: 題目描述: 題目鏈接: 思路: substr函數: 思路詳解: 代碼: 代碼詳解; 題目: 題目描述: 題目鏈接: P10906 [藍橋杯 2024 國 B] 合法密碼 -…

NoSQL 簡單講解

目錄 1. NoSQL 的背景與意義 1.1 數據庫的演變 1.2 NoSQL 的興起 2. NoSQL 數據庫的分類 2.1 鍵值存儲(Key-Value Stores) 2.2 文檔數據庫(Document Stores) 2.3 列族存儲(Column-Family Stores) 2.…

122.在 Vue3 中使用 OpenLayers 實現圖層層級控制(zIndex)顯示與設置詳解

?? 作者:彭麒 ?? 郵箱:1062470959@qq.com ?? 聲明:本文源碼歸吉檀迦俐所有,歡迎學習借鑒,如用于商業項目請注明出處 ?? ?? 技術棧:Vue 3 + Composition API + OpenLayers 6+ + Element Plus + Tailwind CSS ?? 一、什么是 zIndex(圖層層級)? 在地圖開發中…

車載測試用例開發-如何平衡用例覆蓋度和測試效率的方法論

1 摘要 在進行車載測試用例編寫時,會遇到多個條件導致用例排列組合爆炸的情況,但是為了產品測試質量,我們又不得不保證用例設計的需求覆蓋度,這樣又會使得測試周期非常長。我們如何平衡效率和測試質量?本文進行了一些…

AI——神經網絡以及TensorFlow使用

文章目錄 一、TensorFlow安裝二、張量、變量及其操作1、張量Tensor2、變量 三、tf.keras介紹1、使用tf.keras構建我們的模型2、激活函數1、sigmoid/logistics函數2、tanh函數3、RELU函數4、LeakReLu5、SoftMax6、如何選擇激活函數 3、參數初始化1、bias偏置初始化2、weight權重…

Kubernetes (k8s) 日常運維命令總結

一、資源查看 查看所有命名空間的 Pod kubectl get pod --all-namespaces查看指定命名空間的 Pod kubectl get pod --namespace <命名空間>查看所有部署&#xff08;Deployments&#xff09; kubectl get deployments.apps --all-namespaces查看所有守護進程集&#xff0…

【PostgreSQL教程】PostgreSQL 特別篇之 語言接口連接Perl

博主介紹:?全網粉絲22W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…

07-IDEA企業開發工具-開發入門程序

1. IDEA創建Java項目的代碼結構 項目結構: IDEA中的Java項目包含四種主要結構&#xff1a;工程(Project)、模塊(Module)、包(Package)、類(Class)。 工程(Project): 代表整個項目&#xff0c;通常是一個磁盤目錄或文件夾。模塊(Module): 工程下的子單元&#xff0c;用于劃分項…

深度解析云計算:概念、優勢與分類全覽

以下是對云計算概念、優點和分類更詳細的介紹&#xff1a; 一、云計算的概念 云計算是一種通過互聯網提供計算服務的模式&#xff0c;它基于虛擬化、分布式計算、網絡存儲等一系列先進技術&#xff0c;將計算資源進行整合和管理&#xff0c;形成一個龐大的資源池。這些資源包…

高并發系統的通用設計方法是什么?

背景 高并發系統的通用設計方法是解決系統在面對大量用戶訪問時的性能瓶頸問題。當系統遇到性能瓶頸時&#xff0c;通常是因為某個單點資源&#xff08;如數據庫、后端云服務器、網絡帶寬等&#xff09;達到了極限。 為了提升整個系統的容量&#xff0c;需要找到這個瓶頸資源…

【手機】vivo手機應用聲音分離方案

文章目錄 前言方案 前言 嘗試分離vivo手機音樂與其他應用的聲音 方案 最佳方案&#xff1a;網易云音樂設置內關閉音量均衡 上傳不同的白噪音&#xff0c;成功 goodlock&#xff0c;主要適用于三星手機&#xff0c;vivo不一定適用 app volume control &#xff0c;可行

一個報錯說函數為私有函數

你遇到的警告信息&#xff1a; warning: declaration of struct Zero2TenVDrv will not be visible outside of this function [-Wvisibility]這是編譯器提示你在某個函數內部聲明了一個結構體 struct Zero2TenVDrv&#xff0c;但這個結構體的聲明作用域僅限于該函數內部&…

3.2 Agent核心能力:感知、規劃、決策與執行

智能代理&#xff08;Agent&#xff09;是一種能夠在復雜環境中自主運作的計算實體&#xff0c;其智能行為依賴于四大核心能力&#xff1a;感知&#xff08;Perception&#xff09;、規劃&#xff08;Planning&#xff09;、決策&#xff08;Decision-making&#xff09;和執行…

圖解Mysql原理:深入理解事務的特性以及它的實現機制

前言 大家好&#xff0c;我是程序蛇玩編程。 Mysql中事務大家不陌生吧&#xff0c;事務就是要保證一組數據庫操作&#xff0c;要么全部成功&#xff0c;要么全部失敗。那它具有哪些特性&#xff0c;如何實現的呢?接著往下看。 正文 事務的特性: 事務的基本特性主要為四種…

進行網頁開發時,怎樣把function()中變量值在控制臺輸出,查看?

在網頁開發過程中&#xff0c;為了及時了解JavaScript中的function函數中的變量值&#xff0c;可以用控制臺命令console.log()把變量的值在控制臺輸出&#xff0c;方便調試時對函數變量值進行了解。 看下面的一段示例&#xff1a; <!DOCTYPE html> <html> &l…

linux內核進程管理(1)——創建,退出

linux源碼閱讀——進程管理&#xff08;1&#xff09; 1. 進程的基本介紹1.1 linux中進程和線程的區別1.2 task_struct中的基本內容1.3 命名空間ns(namespace)命名空間結構圖Linux 中的命名空間類型 1.4 進程標識符 2. 創建一個進程的流程2.1 CLONE宏2.2 創建進程系統調用1. do…

人像面部關鍵點檢測

此工作為本人近期做人臉情緒識別&#xff0c;CBAM模塊前是否能加人臉關鍵點檢測而做的嘗試。由于創新點不是在于檢測點的標注&#xff0c;而是CBAM的改進&#xff0c;因此&#xff0c;只是借用了現成庫Dilb與cv2進行。 首先&#xff0c;下載人臉關鍵點預測模型:Index of /file…