2017-09-04 1 views
0

Ich verwende cv2.getRotationMatrix2D, um eine 2x3 Matrix zu erhalten, um ein Quellbild zu drehen. Das funktioniert gut. Jetzt habe ich mehrere 2D-Koordinaten, die Punkte im nicht gedrehten Bild darstellen. Kann ich die gleiche Matrix verwenden, um die einzelnen Punkte zu drehen, und wenn ja, wie? Wenn ich richtig verstanden habe, sollte ich in der Lage sein, die Matrix mit den (x, y) -Koordinaten zu multiplizieren, aber egal welche Kombination von Matrix und Punkten ich versuche, bekomme ich nie einfache x- und y-Koordinaten.Drehen Sie 2D-Punkte mit openCV und Python

Danke für Ihre Hilfe!

Edit:

die Rotationsmatrix ist

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

Was ich bisher tue:

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

Aber das gibt mir nicht eine 2x1 Matrix, wie es sollte, aber:

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

können Sie ein paar Zeile Beispiel für die Definition des Stückes von Code, das funktioniert, nur so bin ich klar, wie es zu beheben? Ich habe eine Idee, wie es geht, aber ich muss sehen, was Sie arbeiten, um zu kommentieren. –

+0

Danke für Ihr Interesse, FlashTeks Antwort gab mir den richtigen Hinweis. –

Antwort

2

Bitte überprüfen Sie t sein site. Da cv2.getRotationMatrix2D eine affine Transformation erstellt, können Sie das Ergebnis des Aufrufs wie folgt schreiben:

.

Wenn Sie nun einen 2D-Punkt umwandeln möchten, müssen Sie diesen Ausdruck berechnen


Dies sollte Ihr Problem lösen. (Alle Bilder aus der referenzierten Dokumentationsseite kommen)

Edit: In Bezug auf Ihre bearbeiten: Sie können nicht die * Operator verwenden, aber vielleicht np.dot() verwenden sollten. Der Operator * führt nur ein reales Matrixvektorprodukt für ein Matrixobjekt aus. Andernfalls wird ein elementweises Produkt ausgeführt.

+0

das ist mehr oder weniger was ich getan habe, überprüfen Sie bitte meine Bearbeitung. Es sollte die letzte Gleichung sein, die ich versuche, oder? –

+0

@MaikFruhner Siehe meine Bearbeitung. – FlashTek

+0

danke! Das war's.. –

0

Würde dies für Sie arbeiten?

definieren zwei Arrays xArray und yArray mit den Punkten Sie

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

Es ist nicht ganz so eloquent, aber sollte es tun zu transformieren wollen. Wenn Sie wirklich eine Reihe von Markern erstellen möchten, dann müssen Sie verwenden:

markers = zip(xArray, yArray)