2010-12-09 7 views
5

Ich habe mit OpenCV in Kombination mit Android gearbeitet und was ich immer versucht habe, ist so wenige Anrufe wie möglich zwischen meinem nativen Code und meinem Java-Code zu verwenden. Wenn ich jedoch die OpenCV port für Android ansehe, scheint es, als ob sie nur eine Wrapper-Funktion für jede native Funktion erstellen und diese von Java aufrufen. Nun, wenn ich nicht das Prinzip von swig wrappers und die ganze Idee von diesem Port total falsch verstehe, wird das nicht viel langsamer sein als die eigentliche Kodierung im nativen Code? Mir ist aufgefallen, dass die Weitergabe von Daten zwischen nativem Code und Java-Code sehr langsam ist. Daher verstehe ich nicht, warum dies in diesem Port am normalsten ist.Irgendwelche Nachteile über den Android OpenCV-Port?

Ich habe es selbst verwendet, aber ich habe mich entschieden, alle Wrapper zu ignorieren und den Code so zu verwenden, wie er ist, und meinen eigenen Wrapper auf die normale Weise zu erstellen, die von Android Tutorials angeboten wird.

Also meine Frage ist, bin ich nur falsch über die Nachteile? Oder sind sie tatsächlich da und was ist der wahre Vorteil der Verwendung von OpenCV in diesem? Ich weiß, dass diese Fragen etwas informell sind, aber ich hoffe, ihr könnt mir helfen.

Antwort

4

Ich kann Ihnen nicht die Antwort geben, die Sie suchen, aber hier ist, was ich denke: Es gibt viele Beispiele für JNI-Ebenen, die jede native Funktion umschließen - OpenGL, Android Canvas, usw. Der Aufruf von JNI ist langsamer als vollständig in nativem Code arbeiten, aber die Frage ist, ob es für eine konkrete Anwendung einen Unterschied macht? Ich glaube in den meisten Fällen ist diese Zeitstrafe im Vergleich zu der Zeit vernachlässigbar, die innerhalb der nativen Funktionen verbracht wird. Allerdings bevorzuge ich so viel Arbeit wie möglich in nativem Code für Android-Apps, nicht hauptsächlich wegen der schnelleren Ausführung, sondern weil Java im Vergleich zu C und C++ peinlich ist.

Verwandte Themen