OpenCV(1):簡介、安裝、入門案例、基礎模塊

1?OpenCV 簡介

????????OpenCV 是一個功能強大、應用廣泛的計算機視覺庫,它為開發人員提供了豐富的工具和算法,可以幫助他們快速構建各種視覺應用。隨著計算機視覺技術的不斷發展,OpenCV 也將會繼續發揮重要的作用。OpenCV 提供了大量的計算機視覺算法和圖像處理工具,廣泛應用于圖像和視頻的處理、分析以及機器學習領域。

1.1?OpenCV 核心特點

????????開源與免費:OpenCV 是一個開源項目,任何人都可以免費使用、修改和分發其代碼。這意味著你可以根據需要對 OpenCV 進行定制化修改。

????????跨平臺支持:OpenCV 支持多個操作系統平臺,包括 Windows、Linux、macOS、Android 和 iOS。你可以在各種設備上使用 OpenCV,包括桌面、服務器以及移動設備。

????????支持多種編程語言:OpenCV 提供了多種編程語言的接口,支持 C++、Python、Java、JavaScript 和 MATLAB 等多種編程語言。因此,無論你是 C++ 開發者還是 Python 愛好者,都能輕松使用 OpenCV

????????強大的功能庫:OpenCV 提供了數百個優化的算法,涵蓋了計算機視覺和圖像處理的方方面面。以下是一些常見的應用:

  1. 圖像處理:?圖像濾波、邊緣檢測、顏色空間轉換、形態學操作、特征提取等。
  2. 視頻分析:?視頻捕捉、運動分析、物體檢測與追蹤等。
  3. 機器學習與人工智能:?OpenCV 集成了深度學習框架,可以進行人臉識別、目標檢測、圖像分類等。
  4. 計算機視覺:?圖像匹配、物體識別、立體視覺、深度圖計算等。

????????高效的性能:OpenCV 內置的許多算法都經過高度優化,支持硬件加速(如 Intel 的 TBB、OpenCL、CUDA 等技術),使得它在處理復雜計算時具備高性能,尤其在處理視頻流和實時圖像分析時非常高效。

1.2?OpenCV 的應用領域

????????OpenCV 的應用領域非常廣泛,涵蓋了計算機視覺的各個方面,例如:

  • 圖像處理:?圖像濾波、圖像增強、圖像分割、圖像特征提取等。
  • 視頻分析:?目標跟蹤、運動檢測、行為識別等。
  • 物體識別:?人臉識別、車牌識別、物體識別等。
  • 機器學習:?支持向量機、K 均值聚類、神經網絡等。
  • 深度學習:?圖像分類、目標檢測、圖像分割等。
  • 增強現實:?虛擬物體疊加、手勢識別等。
  • 機器人:?視覺導航、目標抓取等。

1.3?應用場景

  • 人臉識別與檢測:?利用圖像中人臉的特征進行身份驗證,應用于安全系統、社交媒體和照片管理等領域。
  • 物體檢測與跟蹤:?在監控、無人駕駛、工業檢測等場景中,通過檢測和跟蹤目標物體來進行分析。
  • 增強現實(AR):?將虛擬信息疊加到現實世界的圖像中,廣泛應用于游戲、醫療、工業等領域。
  • 醫療圖像分析:?使用 OpenCV 分析醫學圖像(如 CT 掃描、MRI 圖像)來幫助診斷疾病。
  • 機器人視覺:?機器人通過視覺識別環境,進行物體操作、導航等任務。
  • 無人駕駛:?在自動駕駛中,OpenCV 被用于車道檢測、交通標志識別、障礙物檢測等任務。

2?OpenCV 安裝

????????在使用 OpenCV 之前,首先需要在你的開發環境中安裝它。安裝 OpenCV 的方法取決于你使用的操作系統以及開發語言,我們以 Python 環境下的安裝為例,因為 Python 是 OpenCV 最常用的編程語言之一。

????????使用 pip 安裝 OpenCV 是最簡單和直接的方法,你只需要在命令行中輸入以下命令:

pip install opencv-python

3?OpenCV 入門實例

????????接下來我們來看一個簡單的 OpenCV 實例,我們將實現以下功能:

  1. 讀取一張圖像。
  2. 顯示圖像。
  3. 保存圖像。
  4. 添加簡單的用戶交互。

? ? ? ? 指定一張圖片讀取:

# 導入 OpenCV 庫
import cv2# 1. 讀取圖像
# 替換為實際的圖像路徑,這里是當前目錄下的 "bird.jpg"
image_path = "./bird.jpg"
image = cv2.imread(image_path)# 檢查圖像是否成功讀取
if image is None:print("錯誤:無法加載圖像,請檢查路徑是否正確。")exit()# 2. 顯示圖像
# 創建一個名為 "Display Image" 的窗口,并在其中顯示圖像
cv2.imshow("Display Image", image)# 3. 等待用戶按鍵
# 參數 0 表示無限等待,直到用戶按下任意鍵
key = cv2.waitKey(0)# 4. 根據用戶按鍵執行操作
if key == ord('s'):  # 如果按下 's' 鍵# 保存圖像output_path = "saved_image.jpg"cv2.imwrite(output_path, image)print(f"圖像已保存為 {output_path}")
else:  # 如果按下其他鍵print("圖像未保存。")# 5. 關閉所有窗口
cv2.destroyAllWindows()

? ? ? ? 運行程序效果如下,當按下鍵盤s時將保存圖片并關閉窗口。?

4?OpenCV 基礎模塊

????????OpenCV 是一個功能強大的計算機視覺庫,包含多個模塊,每個模塊專注于不同的功能。OpenCV 是由多個模塊組成的,每個模塊都提供了不同的功能。以下是 OpenCV 中最常用的一些模塊:

  • cv2.core: 核心模塊,包含了圖像處理的基礎功能(如圖像數組的表示和操作)。
  • cv2.imgproc: 圖像處理模塊,提供圖像的各種操作,如濾波、圖像變換、形態學操作等。
  • cv2.highgui: 圖形用戶界面模塊,提供顯示圖像和視頻的功能。
  • cv2.video: 提供視頻處理的功能,如視頻捕捉、視頻流的處理等。
  • cv2.features2d: 特征檢測與匹配模塊,包含了角點、邊緣、關鍵點檢測等。
  • cv2.ml: 機器學習模塊,提供了多種機器學習算法,可以進行圖像分類、回歸、聚類等。
  • cv2.calib3d?: 相機校準和 3D 重建模塊。
  • cv2.objdetect?: 目標檢測模塊。
  • cv2.dnn?: 深度學習模塊。

4.1 Core 模塊

????????提供 OpenCV 的核心功能,包括基本數據結構、矩陣操作、繪圖函數等。

主要類和函數:

  • Mat:?OpenCV 中用于存儲圖像和矩陣的基本數據結構。

  • Scalar:?用于表示顏色或像素值。

  • Point、Size、Rect:?用于表示點、尺寸和矩形。

  • 基本繪圖函數:?cv.line()cv.circle()cv.rectangle()cv.putText()?等。

應用場景:

  • 圖像的基本操作(如創建、復制、裁剪)。

  • 繪制幾何圖形和文本。


4.2?Imgproc 模塊

????????提供圖像處理功能,包括圖像濾波、幾何變換、顏色空間轉換等。

主要類和函數:

  • 圖像濾波:?cv.blur()cv.GaussianBlur()cv.medianBlur()?等。

  • 幾何變換:?cv.resize()cv.warpAffine()cv.warpPerspective()?等。

  • 顏色空間轉換:?cv.cvtColor()(如 BGR 轉灰度、BGR 轉 HSV)。

  • 閾值處理:?cv.threshold()cv.adaptiveThreshold()

  • 邊緣檢測:?cv.Canny()cv.Sobel()cv.Laplacian()

應用場景:

  • 圖像平滑、銳化、邊緣檢測。

  • 圖像縮放、旋轉、仿射變換。

  • 圖像二值化、顏色空間轉換。


4.3 HighGUI 模塊

????????提供高層 GUI 和媒體 I/O 功能,用于圖像的顯示和交互。

主要類和函數:

  • 圖像顯示:?cv.imshow()cv.waitKey()cv.destroyAllWindows()

  • 視頻捕獲:?cv.VideoCapture()cv.VideoWriter()

  • 鼠標和鍵盤事件:?cv.setMouseCallback()

應用場景:

  • 顯示圖像和視頻。

  • 捕獲攝像頭或視頻文件。

  • 處理用戶交互(如鼠標點擊、鍵盤輸入)。


4.4 Video 模塊

????????提供視頻分析功能,包括運動檢測、目標跟蹤等。

主要類和函數:

  • 背景減除:?cv.createBackgroundSubtractorMOG2()cv.createBackgroundSubtractorKNN()

  • 光流法:?cv.calcOpticalFlowPyrLK()

  • 目標跟蹤:?cv.TrackerKCF_create()cv.TrackerMOSSE_create()

應用場景:

  • 視頻中的運動檢測。

  • 目標跟蹤(如行人、車輛跟蹤)。


4.5 Calib3d 模塊

????????提供相機校準和 3D 重建功能。

主要類和函數:

  • 相機校準:?cv.calibrateCamera()cv.findChessboardCorners()

  • 3D 重建:?cv.solvePnP()cv.reprojectImageTo3D()

應用場景:

  • 相機標定(用于去除鏡頭畸變)。

  • 3D 重建(如從 2D 圖像恢復 3D 信息)。


4.6 Features2d 模塊

????????提供特征檢測和描述功能。

主要類和函數:

  • 特征檢測:?cv.SIFT_create()cv.ORB_create()cv.SURF_create()

  • 特征匹配:?cv.BFMatcher()cv.FlannBasedMatcher()

  • 關鍵點繪制:?cv.drawKeypoints()

應用場景:

  • 圖像特征提取和匹配。

  • 圖像拼接、物體識別。


4.7 Objdetect 模塊

????????提供目標檢測功能。

主要類和函數:

  • Haar 特征分類器:?cv.CascadeClassifier()(用于人臉檢測)。

  • HOG 特征分類器:?用于行人檢測。

應用場景:

  • 人臉檢測、行人檢測。


4.8 ML 模塊

????????提供機器學習算法。

主要類和函數:

  • 支持向量機 (SVM):?cv.ml.SVM_create()

  • K 均值聚類 (K-Means):?cv.kmeans()

  • 神經網絡 (ANN):?cv.ml.ANN_MLP_create()

應用場景:

  • 圖像分類、聚類分析。


4.9 DNN 模塊

????????提供深度學習功能,支持加載和運行預訓練的深度學習模型。

主要類和函數:

  • 模型加載:?cv.dnn.readNetFromCaffe()cv.dnn.readNetFromTensorflow()

  • 前向傳播:?net.forward()

應用場景:

  • 圖像分類、目標檢測、語義分割。


4.10 其他模塊

  • Flann:?快速近似最近鄰搜索。

  • Photo:?圖像修復和去噪。

  • Stitching:?圖像拼接。

  • Shape:?形狀匹配和距離計算。

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

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

相關文章

FTP自動上傳/vue打包自動上傳

ftp自動上傳 在我們平時開發項目時,需要將本地代碼編譯后上傳到服務器,我們可以借助Node.js庫中的ssh2來實現自動上傳 首先我們先來說下ssh2的安裝和使用 安裝ssh2 npm install ssh2創建ssh2實例 const { Client } require(ssh2);連接服務器 const c…

SQL復習

SQL復習 MySQL SQL介紹 SQL SQL的全拼是什么? SQL全拼:Structured Query Language,也叫結構化查詢語言。 SQL92和SQL99有什么區別呢? SQL92和SQL99分別代表了92年和99年頒布的SQL標準。 在 SQL92 中采用(&#xff…

nlp|微調大語言模型初探索(1),LLaMA-Factory

前言 微調模型通常比從零開始訓練一個模型的技術要求低。公司不需要擁有大量的深度學習專家,利用現有的開源工具和庫(如Hugging Face的Transformers等),中小型公司可以輕松地使用和微調大型模型,從而快速實現AI能力的集…

軟件定義汽車時代的功能安全和信息安全

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活…

內容中臺驅動企業數字化內容管理高效協同架構

內容概要 在數字化轉型加速的背景下,企業對內容管理的需求從單一存儲向全鏈路協同演進。內容中臺作為核心支撐架構,通過統一的內容資源池與智能化管理工具,重塑了內容生產、存儲、分發及迭代的流程。其核心價值在于打破部門壁壘,…

【探商寶】:大數據與AI賦能,助力中小企業精準拓客引

引言:在數據洪流中,如何精準鎖定商機? 在競爭激烈的商業環境中,中小企業如何從海量信息中快速篩選出高價值客戶?如何避免無效溝通,精準觸達目標企業? 探商寶——一款基于大數據與AI技術的企業信…

springboot接入ShardingJDBC

ShardingJDBC 是 Apache ShardingSphere 的一個子項目,它是一個開源的分庫分表中間件,提供了透明化的數據分片、分布式事務和數據庫治理等功能。ShardingJDBC 以 JDBC Driver 的形式提供,支持任何基于 JDBC 的 ORM 框架、持久層框架和數據庫連…

Dify平臺搭建面試機器人

無代碼搭建面試機器人 什么是Dify 什么是Dify Dify 是一款開源的大語言模型(LLM) 應用開發平臺。它融合了后端即服務(Backend as Service)和 LLMOps 的理念,使開發者可以快速搭建生產級的生成式 AI 應用。即使你是非技術人員,也能…

Django創建一個非前后端分離平臺

1.pub_blog前端創立 1.blog/pub路由 注意兩個路由的區別 2.完善頁面 用表單實現 3.加載wangeditor的幾個文件 4.配置樣式 5.配置js代碼,單獨放在js文件夾中,js文件夾pub_blog onload事件,加載完成后會再加載 5.提交按鈕

什么情況下索引會失效

一、索引創建的原則 1、針對數據量較大,且查詢比較頻繁的表建立索引。 單表超過10萬數據,即可增加索引 2、使用經常作為查詢條件(where)、排序(order by)、分組(group by)操作的字…

內容中臺重構企業內容管理流程驅動智能協作升級

內容概要 內容中臺作為企業數字化轉型的核心基礎設施,通過技術架構革新與功能模塊整合,重構了傳統內容管理流程的底層邏輯。其核心價值在于構建動態化、智能化的內容生產與流轉體系,將分散的創作、存儲、審核及分發環節納入統一平臺管理。基…

用deepseek學大模型04-模型可視化與數據可視化

deepseek.com: pytorch可視化工具 生成神經網絡圖 在 PyTorch 中,可視化神經網絡結構的常用工具和方法有以下幾種,以下將詳細介紹它們的用法: 1. TensorBoard (PyTorch 官方集成) PyTorch 通過 torch.utils.tensorboard 支持 TensorBoard&a…

JavaScript設計模式 -- 外觀模式

在實際開發中,往往會遇到多個子系統協同工作時,直接操作各個子系統不僅接口繁瑣,還容易導致客戶端與內部實現緊密耦合。**外觀模式(Facade Pattern)**通過為多個子系統提供一個統一的高層接口,將復雜性隱藏…

【性能測試】如何理解“10個線程且10次循環“的請求和“100線程且1次循環“的請求

在性能測試中,我們常常會見到不同的并發配置:比如“10個線程且10次循環”與“100線程且1次循環”。乍一看,這兩個設置的總請求數都是100次,但它們對系統的壓力和測試場景卻截然不同。了解其中的區別,能幫助你更精準地模…

Spring Boot 實戰:輕松實現文件上傳與下載功能

目錄 一、引言 二、Spring Boot 文件上傳基礎 (一)依賴引入 (二)配置文件設置 (三)文件上傳接口編寫 (一)文件類型限制 (二)文件大小驗證 &#xff0…

【Golang】GC探秘/寫屏障是什么?

之前寫了 一篇【Golang】內存管理 ,有了很多的閱讀量,那么我就接著分享一下Golang的GC相關的學習。 由于Golang的GC機制一直在持續迭代,本文敘述的主要是Go1.9版本及以后的GC機制,該版本中Golang引入了 混合寫屏障大幅度地優化了S…

DeepSeek教unity------MessagePack-03

數據契約兼容性 你可以使用 [DataContract] 注解代替 [MessagePackObject]。如果類型用 DataContract 進行注解,可以使用 [DataMember] 注解代替 [Key],并使用 [IgnoreDataMember] 代替 [IgnoreMember]。 然后,[DataMember(Order int)] 的…

【對比】Pandas 和 Polars 的區別

Pandas vs Polars 對比表 特性PandasPolars開發語言Python(Cython 實現核心部分)Rust(高性能系統編程語言)性能較慢,尤其在大數據集上(內存占用高,計算效率低)極快,利用…

百度千帆平臺對接DeepSeek官方文檔

目錄 第一步:注冊賬號,開通千帆服務 第二步:創建應用,獲取調用秘鑰 第三步:調用模型,開啟AI對話 方式一:通過API直接調用 方式二:使用SDK快速調用 方式三:在千帆大模…

49. c++計時器

為了測試某段特定代碼的執行時間&#xff0c;體現代碼的性能&#xff0c;可以使用計時器對代碼段計時。下面使用std::chrono中的api編寫簡單案例&#xff1a; // // main.cpp // HelloWorld // // Created by on 2024/11/28. //#include <iostream> #include <vec…