2016-11-07 3 views
2

J'essaie d'obtenir et de peindre des coins dans une image. Maintenant, j'ai une liste de tuples avec le format suivant: (row,column,scale) (l'échelle est parce que j'utilise une pyramide gaussienne), obtenue manuellement à partir du processus harrisCornerDetector et nonMaximumSupression. Cette liste est featuresy1.Comment utiliser OpenCV cornerSubPix() en Python?

Mon code est le suivant:

r,g,b=cv2.split(image) 
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) 
cv2.cornerSubPix(r, featuresy1, (5,5), (-1,1), criteria) 

où l'image est une image en niveaux de gris avec trois formes identiques. Comme vous pouvez le voir, je donne à cornerSubPix comme second paramètre une structure comme celle-ci: [(x1,y1,scale1),(x2,y2,scale2),...,(xn,yn,scalen)].

Ce jette l'erreur suivante:

cv2.cornerSubPix(r, featuresy1, (5,5), (-1,1), criteria) 
TypeError: corners is not a numpy array, neither a scalar 

Pour cette raison, je me demande quel type, le format ou la structure devraient avoir featuresy1 faire cornerSubPix() travailler. Est-ce la seule chose que je fais mal? Il n'y a pas beaucoup de documentation à ce sujet.

Merci!

Répondre

0

Vous devez vous assurer que corners est un tableau numpy avec 3 dimensions (n, 1, 2), où n est le nombre de coins. Il doit également être un type float32.

Il suffit de taper

corners.shape 

à vérifier.

Tapez

corners.dtype 

Pour vérifier que vous utilisez float32.

Pour moi est ressemble à vos coins featuresy1 est la liste où il devrait être un tableau numpy. Convertir d'abord à un tableau numpy:

featuresy1 = np.array(featuresy1) 

OpenCV a un outil facile à understand example qui pourrait vous aider à