2017-09-04 2 views
0

J'utilise cv2.getRotationMatrix2D pour obtenir une matrice 2x3 pour faire pivoter une image source. Cela fonctionne bien. Maintenant, j'ai plusieurs coordonnées 2D, qui représentent des points dans l'image non tournée. Puis-je utiliser la même matrice pour faire pivoter les points individuels et si oui, comment? Si j'ai bien compris, je devrais être capable de multiplier la matrice avec les coordonnées (x, y), mais peu importe la combinaison de matrice et de points que j'essaie, je n'obtiens jamais de simples coordonnées x et y.Rotation des points 2D en utilisant openCV et python

Merci pour votre aide!

Edit:

la matrice de rotation est

[[ 9.24630834e-01 3.80864571e-01 1.52747702e-01] 
[ -3.80864571e-01 9.24630834e-01 1.57068951e+02]] 

ce que je fais jusqu'à présent:

point = np.array([marker.x, marker.y, 1]) 
transform = rot_matrix * point.T 
print transform 

Mais cela ne me donne pas une matrice de 2x1 comme il se doit, mais:

[[ 2.10815830e+02 7.92198307e+01 1.52747702e-01] 
[ -8.68371221e+01 1.92323213e+02 1.57068951e+02]] 
+0

peut vous inclure quelques exemples de ligne de la définition du morceau de code qui fonctionne, juste pour que je suis clair comment résoudre ce problème? J'ai une idée de comment le faire mais j'ai besoin de voir ce que vous avez à faire pour commenter. –

+0

Merci pour votre intérêt, la réponse de FlashTek m'a donné le bon indice. –

Répondre

2

Veuillez vérifier son site. Lorsque cv2.getRotationMatrix2D crée une transformation affine, vous pouvez écrire le résultat de l'appel comme suit:

.

Si vous voulez maintenant de transformer un point 2D vous devez calculer cette expression


Cela devrait résoudre votre problème. (Toutes les images proviennent de la page de documents de référence)

Edit: En ce qui concerne votre édition: Vous ne pouvez pas utiliser l'opérateur *, mais devrait peut-être utiliser np.dot(). L'opérateur * exécute uniquement un produit matriciel-réel réel pour l'objet matriciel. Sinon, il effectue un produit par élément.

+0

c'est plus ou moins ce que j'ai fait, s'il vous plaît vérifier ma modification. Ce devrait être la dernière équation que j'essaie de faire, non? –

+0

@MaikFruhner Voir mes modifications. – FlashTek

+0

merci! c'était ça.. –

0

Cela fonctionnerait-il pour vous?

Define deux tableaux xArray et yArray avec les points que vous voulez transformer

for indexItem in xrange(len(xArray)): 
    point = np.array([xArray[indexItem], yArray[indexItem], 1]) 
    transform = rot_matrix * point.T 
    print transform 

Son pas tout à fait aussi éloquent, mais devrait faire l'affaire. Si vous voulez vraiment créer un tableau de marqueurs, vous devez utiliser:

markers = zip(xArray, yArray)