J'ai suivi un exemple de détection de blob (en utilisant cv2.SimpleBlobDetector
) et a réussi à détecter les taches dans mon image binaire. Mais je ne sais pas comment extraire les coordonnées et la zone des points clés. Voici le code pour les détections d'objets blob:
# I skipped the parameter setting part.
blobParams = cv2.SimpleBlobDetector_Params()
blobVer = (cv2.__version__).split('.')
if int(blobVer[0]) < 3:
detector = cv2.SimpleBlobDetector(blobParams)
else:
detector = cv2.SimpleBlobDetector_create(blobParams)
# Detect Blobs
keypoints_black = detector.detect(255-black_blob)
trans_blobs = cv2.drawKeypoints(gray_video_crop, \
keypoints_white, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Donc la variable keypoints_black
contient les informations du ou des blob. Lorsque j'ai imprimé la variable, elle ressemblait à quelque chose comme ça (2 blobs ont été trouvés):
KeyPoint 0x10b10b870, KeyPoint 0x10b1301b0
Alors, comment puis-je obtenir les coordonnées du centre de masse des points clés et leur zone afin que je puisse les envoyer sous forme de messages osc pour l'interaction.
La propriété pt
:
keypoints = detector.detect(frame) #list of blobs keypoints
x = keypoints[i].pt[0] #i is the index of the blob you want to get the position
y = keypoints[i].pt[1]
Si vous avez une liste de points clés. Ensuite, vous pouvez imprimer comme indiqué ci-dessous
for keyPoint in keyPoints:
x = keyPoint.pt[0]
y = keyPoint.pt[1]
s = keyPoint.size
Modifier: la taille détermine le diamètre du voisinage significatif des points clés. Vous pouvez utiliser cette taille et calculer approximativement la zone de la goutte.