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:最小圓心距離,避免多重檢測。
    • 1075:分別為 Canny 高閾值與檢測圓形的累加閾值。
    • 375:設置檢測的最小與最大圓半徑。
  • 繪製檢測結果: 使用 cv2.circle 繪製圓形與圓心,分別使用紅色與綠色標記。
  • 合併與顯示圖像: 使用 cv2.hconcat 將原圖與檢測結果並排顯示,通過 cv2.imshow 可視化結果。

結論

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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 liusming 的頭像
    liusming

    劉老師的跨域創想工坊

    liusming 發表在 痞客邦 留言(0) 人氣()