DigiHouse
日本語

TECH ARTICLE · NCU · 3 MIN READ

Blog / NCU

第 29 課|使用 OpenCV 進行輪廓檢測與繪製

使用 OpenCV 進行輪廓檢測與繪製。本文已重新整理為適合 DigiHouse 閱讀的課程文章,並保留原始 PIXNET 刊載網址。

使用 OpenCV 進行輪廓檢測與繪製

本教學展示如何利用 OpenCV 從靜態圖像中檢測輪廓,並在畫面上繪製檢測結果。

程式碼範例與註解

text
# 匯入 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 檢測的閾值或輪廓檢測參數,適配不同場景需求。

劉老師的跨域創想工坊

本文亦刊載於 PIXNET

https://liusming.pixnet.net/blog/posts/14222886531