J'ai essayé d'utiliser le code suivant:

    xCoordinate=point.x

(le point est le type de cv2.keyPoint) Cela me donne une erreur disant que cv2.keyPoint n'a pas d'attribut 'x'

7
mengmengxyz 9 mars 2016 à 09:21

6 réponses

Meilleure réponse

Vous pouvez utiliser:

import numpy as np

pts = np.float([kp[idx].pt for idx in range(0, len(kp))]).reshape(-1, 1, 2)

pts sera un array de points clés.

10
user664303 22 mars 2019 à 20:59

Lisez les documents.

Classe KeyPoint

Structure des données pour les détecteurs de points saillants.

  • Point2f pt - coordonnées du point clé

  • taille du flotteur - diamètre du voisinage significatif des points clés

  • angle de flottement ... ¶

Donc point.pt est un Point2f.

Essayez x,y= point.pt

6
roadrunner66 20 nov. 2018 à 02:05

Voici ma prise (code exécutable):

import cv2, os
import numpy as np
import matplotlib.pyplot as plt

# INITIALISATION
filename = os.path.join('foo', 'bar.jpg')
img0 = cv2.imread(filename) # original image
gray = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY) # convert to grayscale
sift = cv2.xfeatures2d.SIFT_create() # initialize SIFT 
f, (ax1, ax2) = plt.subplots(1, 2) # create subplots

# DETECT AND DRAW KEYPOINTS
# sift.detect() returns a list of keypoints
# keypoint is a standard class of opencv (not just SIFT-related)
kp = sift.detect(gray,None) # calculates SIFT points
img1=cv2.drawKeypoints(gray,kp, None) # mae new image with keypoints drawn
ax1.imshow(img1) # plot 

# RETREIVE KEYPOINTS COORDINATES AND DRAW MANUALLY
# Reade these and make numpy array
pts = np.asarray([[p.pt[0], p.pt[1]] for p in kp])
cols = pts[:,0]
rows = pts[:,1]
ax2.imshow(cv2.cvtColor(img0, cv2.COLOR_BGR2RGB))
ax2.scatter(cols, rows)

plt.show()
1
quickbug 2 nov. 2018 à 12:58

point.pt is a tuple (x, y) `.

Donc,

x = point.pt[0]
y = point.pt[1]

Ou,

(x,y) = point.pt
12
skumhest 22 déc. 2018 à 04:45

J'ai résolu votre problème comme ça.

kp,des = surf.detectAndCompute(img,None) 
pts = [p.pt for p in kp]

Vous obtenez maintenant une liste de coordonnées x, y pour tous les points clés de votre image.

0
Shaido - Reinstate Monica 6 oct. 2017 à 09:06

OpenCV fournit une fonction pour cela. Tu peux courir:

pts = cv2.KeyPoint_convert(kp)
5
Vik 28 mars 2019 à 13:29