[PYTHON] Exemple d'exécution de la détection d'objets blob avec OpenCV

introduction

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.

shapes.jpg

OpenCV a une fonction intégrée qui peut détecter automatiquement les blobs, ce qui facilite leur recherche.

Chose que tu veux faire

Je veux trouver une forme ronde et la compter.

code

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() 

résultat

>python blob.py
Nombre de cercles: 8

out.jpg

Histoire qui a échoué dans l'exécution

Quand j'ai essayé le code publié sur un autre site, Python s'est écrasé.

キャプチャ.JPG

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)  

en conclusion

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.

URL de référence

https://www.programcreek.com/python/example/89350/cv2.SimpleBlobDetector https://www.visco-tech.com/technical/direction-presence/blob/

Recommended Posts

Exemple d'exécution de la détection d'objets blob avec OpenCV
Exemple d'utilisation de lambda
Détection de caractéristiques à l'aide d'opencv (détection de coin)
Tour verticale de Pise utilisant OpenCV ~
Jugement de l'image rétroéclairée avec OpenCV
[Python] Utilisation d'OpenCV avec Python (détection des bords)
J'ai essayé d'utiliser GrabCut d'OpenCV
Exemple d'utilisation de variables de classe et de méthodes de classe
J'ai essayé la détection d'objets en utilisant Python et OpenCV
J'ai essayé d'utiliser le filtre d'image d'OpenCV
Essayez de projeter la conversion d'image en utilisant OpenCV avec Python
Reproduire l'exemple d'exécution du chapitre 4 de Hajipata en Python
Reproduire l'exemple d'exécution du chapitre 5 de Hajipata en Python
Mesure du temps d'exécution
Détection des marqueurs ArUco
Exemple de programme et exemple d'exécution de la généralisation empilée
Résumé de l'exécution de la fonction récursive anonyme à l'aide du combinateur de points d'immobilité
Comparaison des méthodes de détection des couleurs dans OpenCV inRange, numpy, cupy
python> Exemple d'utilisation de strip ()> src = '0123456789ABCDEF' / wrk = src.strip ('DEF')
Détection d'anomalies par encodeur automatique à l'aide de keras [Exemple d'implémentation pour les débutants]