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 檢測邊緣,設定上下閾值分別為 50150
  • 輪廓檢測: 使用 cv2.findContours 從邊緣圖中提取輪廓,並返回輪廓數據和層次結構。
  • 繪製輪廓: 在原圖的副本上繪製所有檢測到的輪廓,顏色為綠色 (0, 255, 128),線條厚度為 2。
  • 合併與顯示: 使用 cv2.hconcat 將原圖與輪廓圖並排顯示,並通過 cv2.imshow 視覺化結果。

結論

本程式展示了從靜態圖像中檢測輪廓的完整過程,並將檢測結果直觀地繪製在圖像上。用戶可調整 Canny 檢測的閾值或輪廓檢測參數,適配不同場景需求。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 liusming 的頭像
    liusming

    劉老師的跨域創想工坊

    liusming 發表在 痞客邦 留言(0) 人氣()