web-dev-qa-db-ja.com

OpenCVは、ブロブ検出からキーポイントの座標と面積を返します、Python

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の情報が含まれています。変数を出力すると、次のようになりました(2つのblobが見つかりました)。

KeyPoint 0x10b10b870, KeyPoint 0x10b1301b0

そこで、キーポイントの重心とその領域の座標を取得して、インタラクション用のoscメッセージとして送信できるようにする方法を説明します。

12
J_yang

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]

一部のドキュメント

11
João Paulo

キーポイントのリストがある場合。次に、以下に示すように印刷できます

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

編集:サイズは、意味のあるキーポイント近傍の直径を決定します。そのサイズを使用して、ブロブの面積を大まかに計算できます。

9
Karthik N G