OpenCV計算機視覺實戰(2)——環境搭建與OpenCV簡介
- 0. 前言
- 1. OpenCV 安裝與配置
- 1.1 安裝 Python-OpenCV
- 1.2 配置開發環境
- 2. OpenCV 基礎
- 2.1 圖像讀取與顯示
- 2.2 圖像保存
- 3. 攝像頭實時捕獲
- 小結
- 系列鏈接
0. 前言
OpenCV
(Open Source Computer Vision Library
) 是一個開源計算機視覺庫,廣泛應用于圖像處理、機器視覺、人工智能等領域。本文將手把手教你從環境搭建到運行第一個 OpenCV
程序,包含圖像的讀取、顯示、保存,以及使用攝像頭實時捕獲圖像的基礎操作。
1. OpenCV 安裝與配置
1.1 安裝 Python-OpenCV
通過 pip
快速安裝 OpenCV
的核心模塊和擴展模塊:
# 安裝基礎模塊(核心功能)
pip install opencv-python
# 安裝擴展模塊(包含SIFT/SURF等額外功能)
pip install opencv-contrib-python
安裝完成后,進行驗證:
>>> import cv2
>>> cv2.__version__
1.2 配置開發環境
推薦以下三種開發工具:
工具 | 配置建議 |
---|---|
PyCharm | 創建 Python 項目 → 安裝 opencv-python 包 → 配置虛擬環境 |
VSCode | 安裝 Python 擴展 → 使用 Jupyter Notebook 交互式調試 |
Jupyter Lab | 適合快速實驗 → 通過 %matplotlib inline 實時顯示圖像 |
2. OpenCV 基礎
2.1 圖像讀取與顯示
OpenCV
讀取圖像非常簡單,下面是一個 OpenCV
版的 Hello World
程序:
import cv2# 讀取圖像
img = cv2.imread("cat.jpg") # 顯示圖像(窗口名 + BGR格式數據)
cv2.imshow("Demo", img)
cv2.waitKey(0) # 按任意鍵繼續
cv2.destroyAllWindows() # 關閉所有窗口
關鍵函數解析:
cv2.imread()
:讀取圖像,默認參數cv2.IMREAD_COLOR
為彩色模式(使用參數cv2.IMREAD_GRAYSCALE
可以讀取為灰度圖像)cv2.imshow()
:創建一個窗口并顯示圖像cv2.waitKey()
:參數為等待時間(毫秒),0
表示無限等待直到用戶按鍵cv2.destroyAllWindows()
:關閉所有OpenCV
窗口
2.2 圖像保存
OpenCV
提供了 imwrite()
函數來保存圖像到文件:
# 保存圖像(質量參數 0-100)
cv2.imwrite("output.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 90])
參數說明:
- 第一個參數:保存的文件路徑(包括文件名和擴展名)
- 第二個參數:要保存的圖像數據
- 第三個參數(可選):保存參數,以列表形式提供
常用保存參數:
JPEG
格式:
[cv2.IMWRITE_JPEG_QUALITY, quality] # quality: 0-100,默認95
PNG
格式:
[cv2.IMWRITE_PNG_COMPRESSION, compression] # compression: 0-9,默認1
WEBP
格式:
[cv2.IMWRITE_WEBP_QUALITY, quality] # quality: 1-100,默認100
3. 攝像頭實時捕獲
使用以下 OpenCV
代碼可以方便的實時讀取電腦攝像頭視頻流:
import cv2
# 打開默認攝像頭(設備索引為0)
cap = cv2.VideoCapture(0)# 檢查攝像頭是否成功打開
if not cap.isOpened():print("無法打開攝像頭")exit()
while True:# 逐幀捕獲ret, frame = cap.read()if not ret:print("無法接收幀,退出")break# 顯示捕獲到的幀cv2.imshow('Live Video', frame)# 如果按下 'q' 鍵,則退出循環if cv2.waitKey(1) & 0xFF == ord('q'):break# 釋放資源
cap.release()
cv2.destroyAllWindows()
關鍵函數解析:
cv2.VideoCapture(0)
:初始化攝像頭,0
通常代表計算機的默認攝像頭,如果有多個攝像頭,可以嘗試1
,2
等索引,也可以傳入視頻文件路徑來讀取視頻文件cap.read()
:讀取一幀,返回值有兩個,ret
:布爾值,表示是否成功讀取幀,如果讀取失敗,ret
為False
,應退出循環;frame
:當前幀的圖像數據cv2.imshow()
:顯示捕獲到的幀,可以在循環中添加任意圖像處理操作,可以同時顯示多個窗口展示不同的處理效果cv2.waitKey(1) & 0xFF == ord('q')
:按q
退出,ord('q')
獲取字符q
的ASCII
碼cap.release()
:釋放攝像頭資源
除此之外,我們也可以對攝像頭進行高級設置,例如,設定分辨率:
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
獲取和設置幀率:
# 獲取當前幀率
fps = cap.get(cv2.CAP_PROP_FPS)# 設置幀率
cap.set(cv2.CAP_PROP_FPS, 30)
其他常用屬性的設置:
# 亮度
cap.set(cv2.CAP_PROP_BRIGHTNESS, 0.5) # 0-1
# 對比度
cap.set(cv2.CAP_PROP_CONTRAST, 0.5) # 0-1
# 飽和度
cap.set(cv2.CAP_PROP_SATURATION, 0.5) # 0-1
# 增益
cap.set(cv2.CAP_PROP_GAIN, 0) # 自動增益通常為0
# 曝光
cap.set(cv2.CAP_PROP_EXPOSURE, -7) # 負值表示自動曝光
檢查攝像頭支持的屬性:
for i in range(0, 18):print(f"Property {i}: {cap.get(i)}")
小結
通過本文,我們已經完成了 OpenCV
環境的搭建,了解了基本圖像讀取、顯示、保存的方法,并學會了如何使用攝像頭捕獲實時視頻幀。
系列鏈接
OpenCV計算機視覺實戰(1)——計算機視覺簡介