17

我遵循了一个 blob 检测示例(使用cv2.SimpleBlobDetector)并成功检测到二进制图像中的 blob。但是我不知道如何提取关键点的坐标和面积。以下是 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)

因此变量keypoints_black包含 blob(s) 的信息。当我打印变量时,它看起来像这样(发现了 2 个 blob):

KeyPoint 0x10b10b870, KeyPoint 0x10b1301b0

那么如何获得关键点的质心坐标及其面积,以便我可以将它们作为 osc 消息发送以进行交互。

4

2 回答 2

17

物业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]

一些文档

于 2015-06-12T18:51:59.547 回答
11

如果您有关键点列表。然后就可以如下图打印了

for keyPoint in keyPoints:
    x = keyPoint.pt[0]
    y = keyPoint.pt[1]
    s = keyPoint.size

编辑:大小决定了有意义的关键点邻域的直径。您可以使用该大小并粗略计算 blob 的面积。

于 2016-05-19T19:52:44.347 回答