close
使用 OpenCV 進行輪廓檢測與繪製
本教學展示如何利用 OpenCV 從靜態圖像中檢測輪廓,並在畫面上繪製檢測結果。
程式碼範例與註解
# 匯入 OpenCV 模組
import cv2
# 加載靜態圖像
cap = cv2.VideoCapture('coin.jpg')
ret, frame = cap.read()
# 將圖像轉換為灰階並應用高斯模糊
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (13, 13), 0)
# 使用 Canny 邊緣檢測
edged = cv2.Canny(gray, 50, 150)
# 檢測輪廓
contours, hierarchy = cv2.findContours(
edged.copy(),
cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE
)
# 繪製輪廓
out = frame.copy()
cv2.drawContours(out, contours, -1, (0, 255, 128), 2)
# 合併原圖與輪廓圖
frame = cv2.hconcat([frame, out])
# 顯示結果
cv2.imshow('frame', frame)
cv2.waitKey(0)
cv2.destroyAllWindows()
程式解析
- 讀取圖像: 使用
cv2.VideoCapture
加載圖像檔案,並通過cap.read()
獲取圖像數據。 - 灰階與模糊化處理: 將圖像轉換為灰階以降低計算複雜度,並應用
cv2.GaussianBlur
平滑影像,減少噪聲干擾。 - 邊緣檢測: 使用
cv2.Canny
檢測邊緣,設定上下閾值分別為50
和150
。 - 輪廓檢測: 使用
cv2.findContours
從邊緣圖中提取輪廓,並返回輪廓數據和層次結構。 - 繪製輪廓: 在原圖的副本上繪製所有檢測到的輪廓,顏色為綠色
(0, 255, 128)
,線條厚度為 2。 - 合併與顯示: 使用
cv2.hconcat
將原圖與輪廓圖並排顯示,並通過cv2.imshow
視覺化結果。
結論
本程式展示了從靜態圖像中檢測輪廓的完整過程,並將檢測結果直觀地繪製在圖像上。用戶可調整 Canny 檢測的閾值或輪廓檢測參數,適配不同場景需求。
全站熱搜