close
使用 OpenCV 檢測與簡化多邊形輪廓
本文展示如何使用 OpenCV 檢測圖像中的多邊形輪廓,並使用多邊形近似技術簡化輪廓點。
程式碼範例與註解
# 匯入必要模組
import cv2
# 常量表示輪廓索引
RECT, HEXAGON = 0, 1
# 加載圖像並轉換為灰階
frame = cv2.imread('poly.png')
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 使用 Canny 邊緣檢測並進行膨脹處理
edged = cv2.Canny(gray, 50, 150)
edged = cv2.dilate(edged, None, iterations=1)
# 檢測輪廓
contours, hierarchy = cv2.findContours(
edged,
cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE
)
# 輸出處理前的點數量
print('=== 處理前')
print('矩形點數量:{}'.format(len(contours[RECT])))
print('六邊形點數量:{}'.format(len(contours[HEXAGON])))
# 使用多邊形近似簡化輪廓
approx_rect = cv2.approxPolyDP(contours[RECT], 30, True)
approx_hex = cv2.approxPolyDP(contours[HEXAGON], 30, True)
# 輸出處理後的點數量
print('=== 處理後')
print('矩形點數量:{}'.format(len(approx_rect)))
print('六邊形點數量:{}'.format(len(approx_hex)))
# 繪製簡化後的輪廓
cv2.drawContours(frame, [approx_rect], -1, (0, 0, 255), 5)
cv2.drawContours(frame, [approx_hex], -1, (0, 0, 255), 5)
# 顯示結果
cv2.imshow('frame', frame)
cv2.waitKey(0)
cv2.destroyAllWindows()
程式解析
- 讀取與灰階轉換: 使用
cv2.imread
加載圖像,並轉換為灰階以便進行邊緣檢測。 - 邊緣檢測: 使用
cv2.Canny
檢測邊緣,並通過cv2.dilate
擴展邊緣以強化輪廓。 - 輪廓檢測: 使用
cv2.findContours
檢測圖像中的輪廓,返回輪廓和層次結構。 - 多邊形近似: 使用
cv2.approxPolyDP
簡化輪廓點,透過設定容差參數控制近似精度。 - 繪製簡化後的輪廓: 使用
cv2.drawContours
繪製簡化後的矩形與六邊形輪廓,並以紅色標記。 - 顯示結果: 使用
cv2.imshow
顯示原圖與簡化後的輪廓,方便對比檢測效果。
結論
本程式展示了如何使用 OpenCV 檢測多邊形輪廓,並透過多邊形近似技術簡化點數。這種方法適用於圖形檢測、形狀識別等應用場景,且支持精度控制以適應不同需求。
文章標籤
全站熱搜