DigiHouse
繁體中文

TECH ARTICLE · NCU · 4 MIN READ

Blog / NCU

第 30 課|使用 OpenCV 進行圓形檢測與繪製

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

使用 OpenCV 進行圓形檢測與繪製

本文展示如何利用 OpenCV 的霍夫圓變換檢測圖像中的圓形,並將結果可視化。

程式碼範例與註解

text
# 匯入必要模組
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 可視化結果。

結論

本程式展示了如何使用霍夫圓變換檢測圖像中的圓形,並將結果以圖像方式顯示。用戶可以調整霍夫變換的參數(如閾值與半徑範圍),以適應不同應用場景。

劉老師的跨域創想工坊

本文亦刊載於 PIXNET

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