本文將介紹OpenCV中的SimpleBlobDetector
來檢測斑點或圓,也解釋與霍夫轉換找圓方法的差異。
SimpleBlobDetector
是OpenCV中用於檢測影像中的斑點(blob)的模塊之一。這個檢測過程基於一些預定義的特徵,其中包括顏色、面積、圓形度等
import cv2
import numpy as np
# 讀取圖像
image_path = "./download.jpg" # 請替換為實際圖像的路徑
im = cv2.imread(image_path, cv2.IMREAD_COLOR)
# 初始化 SimpleBlobDetector
params = cv2.SimpleBlobDetector_Params()
# 選擇檢測的標準(可以根據需要自行調整)
# 設定參數
params.filterByColor = True #只檢測指定的顏色
params.blobColor = 0 # 若設定0 就是檢測所有顏色
params.minThreshold = 10 #最小,二值化閥值
params.maxThreshold = 200 #最大,二值化閥值
params.filterByArea = True #只檢測設定的面積內
params.minArea = 10 # 最小面積
params.maxArea = 1000 # 最大面積
params.filterByCircularity = True
params.minCircularity = 0.5 # 最小圓形度
# 創建 SimpleBlobDetector
detector = cv2.SimpleBlobDetector_create(params)
# 檢測關鍵點
keypoints = detector.detect(im)
# 提取 X 和 Y 座標
for point in keypoints:
x, y = point.pt #(X,Y)座標
x = round(x,2)
y = round(y,2)
Diameter = round(point.size,2) #直徑
print(f"Keypoint at ({x}, {y}), Diameter: {Diameter}")
# 在圖像上繪製關鍵點
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0, 0, 255),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
# 顯示原始圖像和帶有關鍵點的圖像
cv2.imshow("Original Image", im)
cv2.imshow("Image with Keypoints", im_with_keypoints)
cv2.waitKey(0)
cv2.destroyAllWindows()
KeyPoint
物件包含以下主要屬性:
pt
: 關鍵點的中心座標,是一個包含 (X, Y) 的元組。
size
: 關鍵點的直徑。
angle
: 關鍵點的方向,以度為單位。這是指特徵的主方向。
response
: 表示關鍵點的檢測強度或響應值。通常,這可以視為特徵的質量或重要性的度量。
octave
: 表示檢測到關鍵點所在的圖像金字塔層級。
class_id
: 關鍵點的類別 ID,用於區分不同類型的特徵點。
blobColor
(Blob的顏色):
filterByColor
(根據顏色過濾):
資料類型:布林值(True 或 False)
意義:是否根據 blob 的顏色進行過濾。如果設置為 True,則只檢測指定顏色的 blob,設置False,將檢測所有顏色。
filterByArea
(根據面積過濾):
資料類型:布林值
意義:是否根據 blob 的面積進行過濾。如果設置為 True,則只檢測指定面積範圍內的 blob。
minThreshold
和 maxThreshold
(最小和最大閾值):
資料類型:整數
意義:用於指定二值化閾值的範圍。blob 的檢測將在這個閾值範圍內進行。
minRepeatability
(最小重複性):
資料類型:整數