2010-12-09 17 views
5

He trabajado con OpenCV en combinación con Android anteriormente y lo que siempre intenté hacer es utilizar la menor cantidad posible de llamadas entre mi código nativo y mi código Java. Sin embargo, cuando miro el OpenCV port para Android, parece que solo crean una función de envoltura para cada función nativa y las llaman desde Java. Ahora, a menos que no comprenda totalmente el principio de las envolturas swig y la idea de este puerto, ¿no será mucho más lento que hacer la codificación real en el código nativo? Noté que pasar datos entre el código nativo y el código de Java es muy lento, así que no entiendo por qué parece ser lo más normal en este puerto.¿Alguna desventaja sobre el puerto OpenCV de Android?

Lo usé yo mismo, pero decidí ignorar todas las envolturas y usar el código tal como está y crear mi propio contenedor utilizando la forma normal presentada por los tutoriales de Android.

Así que mi pregunta es, ¿me equivoco sobre las desventajas? ¿O están realmente allí y cuál es la verdadera ventaja de usar OpenCV en este momento? Sé que estas preguntas son algo informales, pero espero que puedan ayudarme.

Respuesta

4

No puedo darle la respuesta que está buscando, pero esto es lo que pienso: hay muchos ejemplos de capas JNI que envuelven cada función nativa: OpenGL, Canvas de Android, etc. Llamar a través de JNI es más lento que trabajando completamente en código nativo, pero la pregunta es ¿hace alguna diferencia para una aplicación concreta? Creo que en la mayoría de los casos esta pena de tiempo es ignorable en comparación con el tiempo pasado dentro de las funciones nativas. Sin embargo, estoy a favor de hacer todo el trabajo posible en el código nativo para aplicaciones de Android, no principalmente debido a la ejecución más rápida, sino porque Java es un lenguaje incómodo en comparación con C y C++.

Cuestiones relacionadas