OpenCV возвращает координаты и область ключевых точек из обнаружения blob, Python

я следовал примеру обнаружения blob (используя cv2.SimpleBlobDetector) и успешно обнаружил капли в моем двоичном изображении. Но тогда я не знаю, как извлечь координаты и площадь точек. Вот код для обнаружения 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 капли):

KeyPoint 0x10b10b870, KeyPoint 0x10b1301b0

Итак, как мне получить координаты центра масс из ключевых точек и их области, чтобы я мог отправлять их в качестве сообщений osc для взаимодействия.

2 ответов


на 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]

документация


Если у вас есть список точек. Затем вы можете распечатать, как показано ниже

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

Edit: Size определяет диаметр значимой окрестности ключевой точки. Вы можете использовать этот размер и примерно посчитать площадь объекта.