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) |
🚀 現在你已經學會如何使用邊緣偵測與形態學操作!接下來,我們將學習物件偵測技術! 😊