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 提供了數百個優化的算法,涵蓋了計算機視覺和圖像處理的方方面面。以下是一些常見的應用:
- 圖像處理:?圖像濾波、邊緣檢測、顏色空間轉換、形態學操作、特征提取等。
- 視頻分析:?視頻捕捉、運動分析、物體檢測與追蹤等。
- 機器學習與人工智能:?OpenCV 集成了深度學習框架,可以進行人臉識別、目標檢測、圖像分類等。
- 計算機視覺:?圖像匹配、物體識別、立體視覺、深度圖計算等。
????????高效的性能: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 實例,我們將實現以下功能:
- 讀取一張圖像。
- 顯示圖像。
- 保存圖像。
- 添加簡單的用戶交互。
? ? ? ? 指定一張圖片讀取:
# 導入 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:?形狀匹配和距離計算。