OpenCV播放攝像頭視頻

OpenCV計算機視覺開發實踐:基于Qt C++ - 商品搜索 - 京東

播放攝像頭視頻和播放視頻文件類似,也是通過類VideoCapture來實現,只不過調用open的時候傳入的是攝像頭的索引號。如果計算機安裝了一個攝像頭,則open的第一個參數通常是0,比如:

VideoCapture capture;capture.open(0);

或者直接用構造函數打開攝像頭:

VideoCapture capture(0);

打開成功后,就可以一幀一幀地讀取并一幀一幀地播放了,其實就是在一個循環里,間隔地顯示一幅一幅視頻幀圖片,當間隔時間短了,圖片動起來了,就感覺是在看視頻了。

在編程之前,我們要確保操作系統能打開攝像頭并播放攝像頭視頻,具體步驟如下:

?? 把一個USB攝像頭插入電腦主機。

?? 設置虛擬機的USB控制器。打開VMware設置對話框,在硬件列表里選中“USB控制器”,在右側的“USB兼容性”中選擇USB 3.0,如圖12-4所示。

圖12-4

?? 啟動并連接USB攝像頭。由于目前是在Linux虛擬機中,因此當我們在主機上插上USB攝像頭后,需要先連接USB攝像頭到虛擬機。啟動Linux虛擬機后,依次單擊VMware的菜單“虛擬機”→“可移動設備”→“Nintenda USB Camera”→“連接(斷開與主機的連接)”,“連接(斷開與主機的連接)”菜單上就會出現一個“√”,說明USB攝像頭連接到Linux虛擬機中了。我們可以用命令查看一下:

# ll /dev/video*crw-rw---- 1 root video 81, 0 8月? 31 20:56 /dev/video0crw-rw---- 1 root video 81, 1 8月? 31 20:56 /dev/video1

如果顯示/dev/video0,則說明攝像頭已經連接到Linux虛擬機中了。現在在命令行中打開攝像頭:

# cheese

此時就可以看到攝像頭視頻了,如圖12-5所示。

???????圖12-5

系統能打開攝像頭了,那么使用程序方式打開也就簡單了。這里先關閉這個攝像頭窗口。

【例12.3】播放攝像頭視頻

?? 新建一個控制臺工程,工程名是test。

?? 在工程配置文件test.pro的末尾添加頭文件和庫文件:

INCLUDEPATH += /usr/local/include/opencv4/LIBS += -L /usr/local/lib -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_core -lopencv_videoio

注意:配置文件test.pro一定要包含庫opencv_videoio,這個庫提供和攝像頭相關的系統函數。

?? 打開main.cpp,并輸入如下代碼:

#include <opencv2/opencv.hpp>
using namespace cv;int main() 
{VideoCapture capture(0); // 創建一個捕獲對象并打開它if (!capture.isOpened()) // 判斷打開一個捕獲視頻的設備(也就是攝像頭)是否成功{puts("open failed");return -1;}Mat frame;while (capture.read(frame)) 		// 讀取視頻幀{imshow("video-demo", frame); 	// 顯示視頻幀if (waitKey(30) >= 0)			// 延時30毫秒,按下任何鍵就退出break; 						// 跳出循環}return 0; 							// 結束程序
}

在上述代碼中,首先創建一個捕獲對象并打開它,然后判斷打開是否成功。如果打開成功,則通過while循環逐幀讀取并用imshow顯示該幀圖片,在while中每隔30毫秒循環讀取幀并顯示,這樣看起來就像視頻了。用戶按下任何鍵就退出循環結束程序。waitKey(30)表示程序每30毫秒檢測一次按鍵。

類VideoCapture既支持視頻文件的讀取,也支持攝像頭視頻的讀取。如果要打開視頻文件,則輸入視頻文件路徑名;如果要打開攝像頭,則輸入攝像頭的ID。

?? 保存工程并運行,結果如圖12-6所示。

???????

圖12-6

要退出程序,可以在鍵盤上按任何鍵,比如空格鍵。

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

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

相關文章

操作系統:內存管理

目錄 1、主要目標 2、核心概念和技術 2.1 物理內存與虛擬內存 2.2 內存分頁機制 2.3 頁面置換算法 3、監控與性能優化 3.1 查看物理內存 3.2 查看虛擬內存 3.3 性能問題 1> 內存不足&#xff08;OOM&#xff09; 2> 內存泄漏 3> 內存碎片 3.4 性能優化策…

專題四:綜合練習( 找出所有子集的異或總和再求和)

以leetcode1863題為例 題目分析&#xff1a; 找到每個子集&#xff0c;然后子集中的元素異或之后全部相加 算法原理分析&#xff1a; 畫決策樹&#xff1a;第一層為這個子集有一個元素 第二層這個子集有兩個元素 從上往下羅列&#xff0c;把所有子集都羅列出來&#xf…

【python】—conda新建python3.11的環境報錯

1.報錯 conda create -n py3.11 python3.11 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ Collecting package metadata: done Solving environment: failed PackagesNotFoundError: The following packages are not available from current channel…

RabbitMQ事務機制

在RabbitMQ中&#xff0c;生產者為了確保消息發送成功&#xff0c;一種是使用 confirm 確認機制&#xff0c;另一種就是使用事務機制&#xff0c;事務機制就是允許生產者在發送消息時&#xff0c;將多個消息操作作為一個原子單元進行處理&#xff0c;要么所有操作都成功執行&am…

兩臺筆記本電腦直接通過HDMI線連接?

兩臺筆記本電腦直接通過HDMI線連接通常無法實現屏幕共享或數據傳輸&#xff0c;因為HDMI接口設計主要用于單向音視頻輸出(如連接顯示器或電視)。以下是詳細分析和替代方案&#xff1a; 為什么HDMI直連兩臺電腦不適用&#xff1f; 接口功能限制&#xff1a;? 大多數筆記本電腦的…

CentOS 和 RHEL

CentOS 和 RHEL&#xff08;Red Hat Enterprise Linux&#xff09;關系非常緊密&#xff0c;簡而言之&#xff1a; CentOS 最初是 RHEL 的免費、開源克隆版&#xff0c;幾乎與 RHEL 二進制兼容。 CentOS 原是 RHEL 的“免費雙胞胎”&#xff0c;但已被放棄&#xff0c;現在推薦…

使用光標測量,使用 TDR 測量 pH 和 fF

時域反射計 &#xff08;TDR&#xff09; 是一種通常用于測量印刷電路板 &#xff08;PCB&#xff09; 測試試樣和電纜阻抗的儀器。TDR 對于測量過孔和元件焊盤的電感和電容、探針尖端電容和電感&#xff0c;甚至寄生電感收發器耦合電容器也非常有用。這也是驗證仿真或提取您自…

9.9 Ollama私有化部署Mistral 7B全指南:命令行交互到API集成全流程解析

Ollama私有化部署Mistral 7B全指南:命令行交互到API集成全流程解析 關鍵詞:Ollama 私有化部署, Mistral 7B 運行, 本地大模型管理, 命令行交互, REST API 集成 一、Mistral 7B 模型特性解析 Mistral 7B 是由 Mistral AI 團隊開發的高性能開源大語言模型,在同等參數量級模型…

vscode與keil的亂碼不兼容問題

都用英文注釋 中文注釋的話&#xff0c;打開vscode的自動識別格式,如下 解決VSCode中文亂碼 自動識別也可以設置識別優先級&#xff0c;把GB2312和UTF8排在自動識別序列前面(因為keil默認就是GB2312) 4.!!!在暫存更改的時候&#xff0c;不要把vscode的設置給暫存了&#xff…

大模型中的KV Cache

1. KV Cache的定義與核心原理 KV Cache&#xff08;Key-Value Cache&#xff09;是一種在Transformer架構的大模型推理階段使用的優化技術&#xff0c;通過緩存自注意力機制中的鍵&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;矩陣&#xff0c;避免重復計算&…

Maven 公司內部私服中央倉庫搭建 局域網倉庫 資源共享 依賴包構建共享

介紹 公司內部私服搭建通常是為了更好地管理公司內部的依賴包和構建過程&#xff0c;避免直接使用外部 Maven 中央倉庫。通過搭建私服&#xff0c;團隊能夠控制依賴的版本、提高構建速度并增強安全性。公司開發的一些公共工具庫更換的提供給內部使用。 私服是一種特殊的遠程倉…

文檔外發安全:企業數據防護的最后一道防線

在當今數字化時代&#xff0c;數據已成為企業最寶貴的資產之一。隨著網絡安全威脅日益增多&#xff0c;企業安裝專業加密軟件已從"可選"變為"必選"。本文將全面分析企業部署華途加密解決方案后獲得的各項戰略優勢。 一、數據安全防護升級 核心數據全面保護…

【ArcGIS】根據shp范圍生成系列等距點:范圍外等距點+漁網點(Python全代碼)

【ArcGIS】根據shp范圍生成系列等距點 目標1&#xff1a;生成邊界外一定范圍、并且等間距分布的點&#x1f4c1; 所需數據&#xff1a;操作步驟-ArcGIS代碼處理-Python 目標2&#xff1a;生成等距漁網點&#x1f4c1; 所需數據&#xff1a;代碼處理-Python 參考 目標1&#xff…

Docker 環境安裝(2025最新版)

Docker在主流的操作系統和云平臺上都可以使用&#xff0c;包括Linux操作 系統&#xff08;如Ubuntu、 Debian、Rocky、Redhat等&#xff09;、MacOS操作系統和 Windows操作系統&#xff0c;以及AWS等云平 臺。 Docker官網&#xff1a; https://docs.docker.com/ 配置宿主機網…

Java并發編程-線程池(二)

文章目錄 線程池的實現原理execute(Runnable command)**1. 階段一&#xff1a;嘗試創建核心線程****2. 階段二&#xff1a;嘗試將任務加入隊列****3. 階段三&#xff1a;嘗試創建非核心線程或拒絕任務****關鍵機制與設計思想** 線程池的實現原理 當向線程池提交一個任務之后&a…

清華大學開源軟件鏡像站地址

清華大學開源軟件鏡像站&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/

腦機接口技術:開啟人類與機器融合的新時代

摘要 腦機接口&#xff08;BCI&#xff09;技術作為一項前沿科技&#xff0c;正在逐步打破人類與機器之間的溝通障礙&#xff0c;為醫療、娛樂、教育等多個領域帶來前所未有的變革。本文將詳細介紹腦機接口技術的基本原理、發展現狀、應用場景以及面臨的挑戰和未來發展趨勢&…

2025前端面試遇到的問題(vue+uniapp+js+css)

Vue相關面試題 vue2和vue3的區別 一、核心架構差異 特性Vue2Vue3響應式系統基于Object.defineProperty基于Proxy&#xff08;支持動態新增/刪除屬性&#xff09;代碼組織方式Options API&#xff08;data/methods分塊&#xff09;Composition API&#xff08;邏輯按功能聚合&am…

Matlab基于SSA-MVMD麻雀算法優化多元變分模態分解

Matlab基于SSA-MVMD麻雀算法優化多元變分模態分解 目錄 Matlab基于SSA-MVMD麻雀算法優化多元變分模態分解效果一覽基本介紹程序設計參考資料效果一覽 基本介紹 Matlab基于SSA-MVMD麻雀算法優化多元變分模態分解 可直接運行 分解效果好 適合作為創新點(Matlab完整源碼和數據),…

Gatsby知識框架

一、Gatsby 基礎概念 1. 核心特性 基于React的靜態站點生成器&#xff1a;使用React構建&#xff0c;輸出靜態HTML/CSS/JS GraphQL數據層&#xff1a;統一的數據查詢接口 豐富的插件系統&#xff1a;超過2000個官方和社區插件 高性能優化&#xff1a;自動代碼分割、預加載、…