web-dev-qa-db-fra.com

OpenCV renvoie les coordonnées des points clés et la zone de la détection de blob, Python

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.

12
J_yang

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]

Quelques documents

11
João Paulo

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.

9
Karthik N G