Seite 1 von 1

Funktion verwenden

Verfasst: Mittwoch 4. November 2009, 09:31
von PEID
hallo,

versuche gerade die Funktion "2DRotationMatrix()" aus OpenCV zu benutzen jedoch erhalte ich lediglich nur 'SyntaxError: invalid syntax' :(

Code: Alles auswählen

cv.2DRotationMatrix(center, angle, scale, map_matrix)
woran liegt dass? wegen der Zahl am Anfang von 2DRotationMatrix?

Wie kann ich nun aber doch die Funktion verwenden?

mfG

Verfasst: Mittwoch 4. November 2009, 09:51
von Zap
Ich habe OpenCV noch nie verwendet aber ein Funktion die mit einer Zahl beginnt kann man erst garnicht anlegen:

Code: Alles auswählen

In [19]: def 2x():
------------------------------------------------------------
   File "<ipython console>", line 1
     def 2x():
         ^
<type 'exceptions.SyntaxError'>: invalid syntax
Teste doch mit einem ```print dir(cv)``` was es alles an möglichen Attributen gibt.

Verfasst: Mittwoch 4. November 2009, 09:55
von sma
Alle Bezeichner in Python müssen mit einem Buchstaben (oder einem _) beginnen. Die Dokumentation ist in dieser Beziehung aber schlecht, denn es sieht tatsächlich so aus, als beginne der Funktionsname mit "2D". Etwas tiefer sieht es so aus, als wenn da noch ein "cv" davor stünde.

Stefan

Verfasst: Mittwoch 4. November 2009, 09:58
von PEID
ok, erscheint folgendes:

Code: Alles auswählen

>>> print dir(cv)
['2DRotationMatrix', ....

Code: Alles auswählen

>>> help(cv)
....
FUNCTIONS
    2DRotationMatrix(...)
        2DRotationMatrix(center, angle, scale, map_matrix) -> None
.....
@sma
für C heißt es scheinbar 'cv2DRotationMatrix()'
und für python 'cv.2DRotationMatrix()'

Verfasst: Mittwoch 4. November 2009, 10:08
von sma
Tja, dann hat da jemand falsch (automatisch) die Funktionsnamen konvertiert, denn es ist ein Syntaxfehler, wenn der Name nicht mit einem Buchstaben oder _ beginnt. Das lässt sich somit nicht direkt aufrufen.

Workaround:

Code: Alles auswählen

getattr(cv, '2DRotationMatrix')(...)
Stefan

Verfasst: Mittwoch 4. November 2009, 11:03
von PEID
Super!! vielen Dank.

Code: Alles auswählen

getattr(cv, '2DRotationMatrix')(...)
es funktioniert!!! :-P