2010-12-09 64 views
5

J'ai déjà travaillé avec OpenCV en combinaison avec Android et j'ai toujours essayé d'utiliser le moins d'appels possibles entre mon code natif et mon code Java. Quand je regarde l'OpenCV port pour Android, il semble qu'ils créent simplement une fonction wrapper pour chaque fonction native et les appellent depuis Java. Maintenant, à moins que je ne comprenne totalement le principe des wrappers swig et l'idée de ce port, cela ne sera-t-il pas beaucoup plus lent que de faire le codage en code natif? J'ai remarqué que passer des données entre le code natif et le code java est vraiment lent, donc je ne comprends pas pourquoi il semble que ce soit la chose la plus normale dans ce port. Je l'ai utilisé moi-même, mais j'ai juste décidé d'ignorer tous les wrappers et d'utiliser le code tel qu'il est et de créer mon propre wrapper en utilisant la méthode normale présentée par les tutoriels Android.Des inconvénients à propos du port Android OpenCV?

Donc ma question est, ai-je juste tort sur les inconvénients? Ou sont-ils réellement là et quel est le véritable avantage d'utiliser OpenCV dans ce cas? Je sais que ces questions sont quelque peu informelles, mais j'espère que vous pourrez m'aider.

Répondre

4

Je ne peux pas vous donner la réponse que vous cherchez, mais voici ce que je pense: il y a beaucoup d'exemples de couches JNI qui enveloppent toutes les fonctions natives - OpenGL, Canvas d'Android, etc. L'appel JNI est plus lent que travaillant entièrement en code natif, mais la question est-elle de faire une différence pour une application concrète? Je crois que dans la majorité des cas cette pénalité de temps est ignorable en comparaison avec le temps passé à l'intérieur des fonctions natives. Cependant, je préfère faire autant de travail que possible dans le code natif pour les applications Android, non pas principalement en raison de l'exécution plus rapide, mais parce que Java est un langage gênant par rapport à C et C++.