close
使用 OpenCV 進行圓形檢測與繪製
本文展示如何利用 OpenCV 的霍夫圓變換檢測圖像中的圓形,並將結果可視化。
程式碼範例與註解
# 匯入必要模組
import cv2
import numpy as np
# 加載圖像並調整尺寸
src = cv2.imread('cup.jpg', -1)
src = cv2.resize(src, (403, 302))
# 將圖像轉換為灰階並應用高斯模糊
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
# 使用霍夫圓變換檢測圓形
circles = cv2.HoughCircles(
gray,
cv2.HOUGH_GRADIENT, # 檢測方法,目前僅支援 HOUGH_GRADIENT
1, # 輸入圖像與檢測圖像的比例,通常設為 1
20, # 各圓心間的最小距離
None, # 固定為 None
10, # Canny 演算法的高閾值
75, # 檢測圓形的累加閾值
3, # 最小圓半徑
75 # 最大圓半徑
)
# 將檢測結果轉換為整數
circles = circles.astype(int)
if len(circles) > 0:
out = src.copy()
for x, y, r in circles[0]:
# 繪製圓形
cv2.circle(out, (x, y), r, (0, 0, 255), 3)
# 繪製圓心
cv2.circle(out, (x, y), 2, (0, 255, 0), 3)
# 合併原圖與結果
src = cv2.hconcat([src, out])
# 顯示結果
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', src)
cv2.waitKey(0)
cv2.destroyAllWindows()
程式解析
- 加載與預處理圖像: 使用
cv2.imread
加載圖像,調整尺寸並轉換為灰階,應用高斯模糊以減少噪聲干擾。 - 霍夫圓變換檢測圓形:
cv2.HoughCircles
是檢測圓形的核心函數。1
:輸入圖像與檢測圖像的比例。20
:最小圓心距離,避免多重檢測。10
和75
:分別為 Canny 高閾值與檢測圓形的累加閾值。3
和75
:設置檢測的最小與最大圓半徑。
- 繪製檢測結果: 使用
cv2.circle
繪製圓形與圓心,分別使用紅色與綠色標記。 - 合併與顯示圖像: 使用
cv2.hconcat
將原圖與檢測結果並排顯示,通過cv2.imshow
可視化結果。
結論
本程式展示了如何使用霍夫圓變換檢測圖像中的圓形,並將結果以圖像方式顯示。用戶可以調整霍夫變換的參數(如閾值與半徑範圍),以適應不同應用場景。
全站熱搜