Un blob est une zone d'une image qui présente des caractéristiques similaires. Par exemple, dans l'image ci-dessous, une figure telle qu'un cercle peut être considérée comme une goutte.
OpenCV a une fonction intégrée qui peut détecter automatiquement les blobs, ce qui facilite leur recherche.
Je veux trouver une forme ronde et la compter.
blob.py
import cv2
import numpy as np
#Chargement des images
image = cv2.imread('shapes.jpg', 0)
#Initialisation des paramètres
params = cv2.SimpleBlobDetector_Params()
#Zone blob (minArea<= blob < maxArea)
params.filterByArea = True
params.minArea = 100
#Arrondi (4 ∗ π ∗ Surface)/périmètre ∗ défini par périmètre)
#(minCircularity <= blob < maxCircularity)
params.filterByCircularity = True
params.minCircularity = 0.85
#Informations de surface convexe (minConvexity)<= blob < maxConvexity)
params.filterByConvexity = True
params.minConvexity = 0.1
#Représente un ovale (minInertiaRatio)<= blob < maxInertiaRatio)
params.filterByInertia = True
params.minInertiaRatio = 0.1
#Création de détecteur
detector = cv2.SimpleBlobDetector_create(params)
#Détection de blob
keypoints = detector.detect(image)
#Encerclez la goutte en rouge
blank = np.zeros((1, 1))
blobs = cv2.drawKeypoints(image, keypoints, blank, (0, 0, 255),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
#Nombre de blobs
count = len(keypoints)
print(f'Nombre de cercles: {count}')
#Afficher l'image
cv2.imshow("out.jpg ", blobs)
cv2.waitKey(0)
cv2.destroyAllWindows()
>python blob.py
Nombre de cercles: 8
Quand j'ai essayé le code publié sur un autre site, Python s'est écrasé.
Quand je l'ai recherché, il semble que la version d'OpenCV ait eu un effet. Dans les versions précédentes d'OpenCV, au lieu de SimpleBlobDetector_create (), une fonction appelée SimpleBlobDetector () était utilisée, et je pense que le flux d'exécution de code par copier-coller → se référer à la fonction qui n'est pas actuellement utilisée → un crash s'est produit. Je vais. Pour contourner ce problème, vous pouvez éviter l'erreur en utilisant SimpleBlobDetector_create () ou en la réécrivant dans le code ci-dessous.
ver = (cv2.__version__).split('.')
if int(ver[0]) < 3:
detector = cv2.SimpleBlobDetector(params)
else:
detector = cv2.SimpleBlobDetector_create(params)
Les exemples d'application de détection de taches comprennent le comptage du nombre et la détection de la position. Il est facile à utiliser avec OpenCV, donc j'aimerais essayer autre chose que cet exemple.
Merci d'avoir regardé jusqu'à la fin. Si vous avez des commentaires ou des suggestions, n'hésitez pas à nous contacter.
https://www.programcreek.com/python/example/89350/cv2.SimpleBlobDetector https://www.visco-tech.com/technical/direction-presence/blob/
Recommended Posts