2024-01-18|閱讀時間 ‧ 約 0 分鐘

[OpenCV應用][Python]斑點檢測blob detect

本文將介紹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的顏色):

    • 資料類型:整數
    • 意義:指定要檢測blob 的暗亮值(0~255),0為全黑,255全白。

filterByColor(根據顏色過濾):

資料類型:布林值(True 或 False)

意義:是否根據 blob 的顏色進行過濾。如果設置為 True,則只檢測指定顏色的 blob,設置False,將檢測所有顏色


filterByArea(根據面積過濾):

資料類型:布林值

意義:是否根據 blob 的面積進行過濾。如果設置為 True,則只檢測指定面積範圍內的 blob。

minThreshold maxThreshold(最小和最大閾值):

資料類型:整數

意義:用於指定二值化閾值的範圍。blob 的檢測將在這個閾值範圍內進行。


minRepeatability(最小重複性):

資料類型:整數

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.