Skip to content

5️⃣ 邊緣偵測與形態學操作

🎯 什麼是邊緣偵測與形態學操作?

邊緣偵測與形態學操作是影像處理的 關鍵技術,主要用於 強調物件邊緣、辨識形狀、降噪與物件分割

適用場景

  • 邊緣偵測:找出影像中的物件輪廓(如車牌辨識、人臉偵測)
  • 形態學操作:清理影像雜訊、強化物件形狀(如 OCR 預處理)

✅ Canny 邊緣偵測

Canny 邊緣偵測是一種 常見的邊緣偵測演算法,可用來找出影像中的物件邊界。

import cv2

# 讀取影像
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用 Canny 邊緣偵測
edges = cv2.Canny(gray, 100, 200)

# 顯示結果
cv2.imshow("Canny Edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.Canny(gray, 100, 200) 參數解釋:

  • 第一個數值 100低閾值
  • 第二個數值 200高閾值

這些閾值影響邊緣偵測的靈敏度。


✅ 形態學操作(膨脹與侵蝕)

形態學操作主要有 膨脹(Dilation)與侵蝕(Erosion),用於強化或去除特定形狀。

🔹 影像膨脹(Dilation)

膨脹可 增強白色區域、填補空洞,適用於 物件強化與降噪

import numpy as np

kernel = np.ones((5, 5), np.uint8)
dilated = cv2.dilate(edges, kernel, iterations=1)

cv2.imshow("Dilated Image", dilated)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果

  • 邊緣變厚,使小型雜訊區域被填補。

🔹 影像侵蝕(Erosion)

侵蝕可 減少白色區域,去除雜訊,適用於 影像降噪、OCR 預處理

eroded = cv2.erode(edges, kernel, iterations=1)

cv2.imshow("Eroded Image", eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果

  • 細小的雜訊會被去除。
  • 物件邊界會被收縮。

✅ 開運算與閉運算

開運算與閉運算是 膨脹與侵蝕的組合技術,可用於進一步降噪或強化物件邊界。

🔹 開運算(Opening) - 先侵蝕、再膨脹,去除小雜訊

opened = cv2.morphologyEx(edges, cv2.MORPH_OPEN, kernel)
cv2.imshow("Opening", opened)
cv2.waitKey(0)
cv2.destroyAllWindows()

適用於移除小型雜訊點(如黑白影像的雜訊)。

🔹 閉運算(Closing) - 先膨脹、再侵蝕,填補小孔洞

closed = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)
cv2.imshow("Closing", closed)
cv2.waitKey(0)
cv2.destroyAllWindows()

適用於填補影像中的小孔洞,如斷裂邊緣。


📝 總結

功能 語法
Canny 邊緣偵測 cv2.Canny(gray, 100, 200)
影像膨脹(增強白色區域) cv2.dilate(image, kernel, iterations=1)
影像侵蝕(去除雜訊) cv2.erode(image, kernel, iterations=1)
開運算(去除雜訊) cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
閉運算(填補孔洞) cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

🚀 現在你已經學會如何使用邊緣偵測與形態學操作!接下來,我們將學習物件偵測技術! 😊