With Constructor (params = cv2.SimpleBlobDetector_Params()
), also not work.
My current code :
# Carregando a imagem
image = cv2.imread("images/blobs.jpg", 0)
imshow('Original Image',image)
# Inicializa o detector de blobs
detector = cv2.SimpleBlobDetector_create()
# Pegando os blobs
keypoints = detector.detect(image)
# Desenhando os blobs.
blank = np.zeros((1,1)) #Cria uma matriz pequena de zeros (só para passar uma imagem vazia como parametro)
blobs = cv2.drawKeypoints(image, keypoints, blank, (0,0,255),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
number_of_blobs = len(keypoints)
text = "Total de Blobs: " + str(len(keypoints))
cv2.putText(blobs, text, (20, 550), cv2.FONT_HERSHEY_SIMPLEX, 1, (100, 0, 255), 2)
# Display image with blob keypoints
imshow("Blobs usando os parâmetros padrões", blobs)
# Setar filtros de parametros
# Vamos pegar os parametros base da função cv2.SimpleBlobDetector_Params
params = cv2.SimpleBlobDetector_Params
# PARÂMETRO DO ASPECTO ÁREA (TAMANHO DO OBJETO)
params.filterByArea = True #Ativa
params.minArea = 100 #Área minima de 100
# PARÂMETRO DA CIRCULARIDADE (O QUANTO A FORMA É PRÓXIMA A UM CIRCULO PERFEITO)
params.filterByCircularity = True #Ativa
params.minCircularity = 0.9 #Testar e ver qual se adequa mais a forma de interesse
# 0 a 1, sendo 1, o circulo perfeito
# PARÂMETRO DA CONVEXIDADE
params.filterByConvexity = False #Desativa o parametro
params.minConvexity = 0.2
# PARÂMETRO DA INERCIA
params.filterByInertia = True #Ativa
params.minInertiaRatio = 0.01 # 1 para full simétrico e abaixo de 1, imperfeições.
"""
MinInertiaRatio - 0.8 a 1 (Circulos ou quase circulos)
MinInertiaRatio - 0.2 a 0.5 (Objetos alongados e elípticos)
MinInertiaRatio - < 0.2 (Qualquer coisa)
"""
#Recriando o detector com os parametros novos
# Create a detector with the parameters
ver = (cv2.__version__).split('.')
if int(ver[0]) < 3 :
detector = cv2.SimpleBlobDetector(params)
else:
detector = cv2.SimpleBlobDetector_create(params)
# Detect blobs
keypoints = detector.detect(image)
# Draw blobs on our image as red circles
blank = np.zeros((1,1))
blobs = cv2.drawKeypoints(image, keypoints, blank, (0,255,0),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
number_of_blobs = len(keypoints)
text = "Number of Circular Blobs: " + str(len(keypoints))
cv2.putText(blobs, text, (20, 550), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 100, 255), 2)
# Show blobs
imshow("Filtering Circular Blobs Only", blobs)
My error: TypeError: Expected cv::SimpleBlobDetector::Params for argument 'parameters'
in line detector = cv2.SimpleBlobDetector.create(params)