OpenCV(Open Source Vision Library)是一個基于開源發行的跨平臺計算機視覺庫,在 Python 中有著廣泛的應用。以下是對 Python OpenCV 庫的介紹:
一、功能特點
圖像和視頻處理可以讀取、顯示和保存各種圖像格式,如 JPEG、PNG 等。對圖像進行裁剪、縮放、旋轉等幾何變換操作,方便進行圖像預處理。能夠進行圖像的顏色空間轉換,例如從 RGB 轉換到 HSV 等,以適應不同的處理需求。特征提取提供了多種特征檢測算法,如 Harris 角點檢測、SIFT(Scale- Feature ,尺度不變特征變換)、SURF(Speeded Up Robust ,加速穩健特征)等,可以用于圖像匹配、目標識別等任務。邊緣檢測算法可以檢測圖像中的邊緣信息,幫助識別物體的輪廓。目標檢測與跟蹤支持多種目標檢測算法,如 Haar 級聯分類器、HOG( of ,方向梯度直方圖)+SVM(Support Vector Machine,支持向量機)等,可以檢測特定的物體或對象。具備目標跟蹤功能,可以在視頻中跟蹤運動的物體。機器學習與深度學習集成可以與機器學習算法結合使用,例如使用支持向量機、隨機森林等進行圖像分類。支持深度學習框架,如 、PyTorch 等,可以加載預訓練的深度學習模型進行圖像識別和目標檢測等任務。
二、應用場景
機器人視覺在機器人領域,OpenCV 可以幫助機器人識別環境中的物體、進行導航和避障。通過攝像頭獲取周圍環境的圖像,利用 OpenCV 進行圖像處理和目標檢測,機器人可以識別障礙物、定位目標物體,并規劃行動路徑。安防監控用于安防監控系統中,實現人臉檢測、車牌識別、行為分析等功能??梢詫崟r監測視頻畫面,檢測異常行為并及時發出警報,提高安全性。醫學影像處理在醫學領域,OpenCV 可以用于醫學影像的分析和處理。例如,對 X 光片、CT 掃描圖像等進行增強、分割和特征提取,幫助醫生進行疾病診斷和治療規劃。工業自動化在工業生產中,OpenCV 可以用于質量檢測、產品識別和裝配線自動化。通過對生產線上的產品進行圖像檢測,可以快速準確地檢測出缺陷產品,提高生產效率和質量。虛擬現實和增強現實在虛擬現實和增強現實應用中,OpenCV 可以用于手勢識別、物體跟蹤和環境感知等功能。通過攝像頭捕捉用戶的動作和環境信息,實現更加自然和沉浸式的交互體驗。
三、OpenCV 庫的常用函數介紹及示例
圖像讀取 --- cv2.imread():
cv2.:以灰度模式讀取圖像。
cv2.:讀取圖像包括 alpha 通道(如果圖像有透明信息)。
import cv2
# 讀取彩色圖像
img_color = cv2.imread('image.jpg')
# 讀取灰度圖像
img_gray = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
2.圖像顯示 - cv2.imshow():
import cv2
img = cv2.imread('image.jpg')
cv2.imshow('My Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.等待鍵盤輸入 - cv2.waitKey():
import cv2
img = cv2.imread('image.jpg')
cv2.imshow('My Image', img)
key = cv2.waitKey(5000) # 等待 5 秒
if key == ord('q'):

print('User pressed "q" key')
cv2.destroyAllWindows()
關閉所有窗口 - cv2.():
import cv2
img = cv2.imread('image.jpg')
cv2.imshow('My Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
5.顏色空間轉換 - cv2.():
函數功能:將圖像從一種顏色空間轉換到另一種顏色空間,這在圖像處理中非常有用,因為不同的顏色空間可以提供不同的處理和分析視角。
函數原型:cv2.(src, code)src:源圖像,是一個 NumPy 數組。code:轉換的標識符,是一個整數,用于指定目標顏色空間。常見的取值如 cv2.(從 BGR 轉換到灰度)、cv2.(從 BGR 轉換到 RGB)等。
示例代碼:
import cv2
img = cv2.imread('image.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
圖像濾波 - cv2.blur()(均值濾波):
import cv2
img = cv2.imread('image.jpg')
blurred_img = cv2.blur(img, (5, 5))
閾值處理 - cv2.():
import cv2
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
ret, thresh_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
邊緣檢測 - cv2.Canny():
import cv2
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
edges = cv2.Canny(img, 100, 200)
輪廓查找 - cv2.() 和 cv2.():
示例代碼:
import cv2

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
圖像縮放 - cv2.resize():
import cv2
img = cv2.imread('image.jpg')
# 按指定大小縮放
resized_img = cv2.resize(img, (500, 500))
# 按比例縮放
resized_img2 = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)
四、使用方法
安裝可以通過 pip 命令進行安裝,例如在命令提示符或終端中輸入 “pip install opencv-python” 即可安裝 OpenCV 的 Python 版本?;静僮髯x取圖像:使用cv2.imread()函數讀取圖像文件,并返回一個 NumPy 數組表示的圖像。顯示圖像:通過cv2.imshow()函數顯示圖像,可以在窗口中查看圖像內容。保存圖像:使用cv2.imwrite()函數將處理后的圖像保存為指定格式的文件。圖像處理示例:
以下是一個簡單的示例代碼,展示了如何使用 OpenCV 讀取圖像、轉換顏色空間并顯示圖像:
import cv2
# 讀取圖像
image = cv2.imread('image.jpg')
# 轉換為灰度圖像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 顯示圖像
cv2.imshow('Original Image', image)
cv2.imshow('Gray Image', gray_image)

# 等待按鍵按下并關閉窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
4.目標檢測
以下是一個使用 Python OpenCV 庫和 Haar 級聯分類器進行目標檢測的示例代碼:
import cv2
# 加載預訓練的 Haar 級聯分類器(這里以檢測正面人臉為例)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 讀取圖像
image = cv2.imread('your_image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 進行人臉檢測
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 在圖像上繪制檢測到的人臉矩形框
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 顯示結果圖像
cv2.imshow('Face Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在這個示例中,我們首先加載了預訓練的 Haar 級聯分類器用于人臉檢測。然后,讀取圖像并將其轉換為灰度圖像。接著,使用方法在灰度圖像上進行人臉檢測,該方法返回檢測到的人臉的位置和大小信息。最后,我們在原始圖像上繪制矩形框來標識檢測到的人臉,并顯示結果圖像。
請注意,你可以根據需要更改要檢測的目標類型,只需加載相應的級聯分類器文件即可。此外,Haar 級聯分類器的性能可能會受到光照、姿態和遮擋等因素的影響。對于更復雜的目標檢測任務,可以考慮使用深度學習方法,如使用 或 PyTorch 框架結合預訓練的目標檢測模型。
總之,Python OpenCV 庫是一個功能強大的計算機視覺工具,為開發者提供了豐富的圖像處理和分析功能。無論是在學術研究、工業應用還是個人項目中,OpenCV 都能發揮重要作用。