2014-01-08 10 views
6

ich nur OpenCV lernen für Android bin ab, ich habe mit ihm ein bisschen rumgespielt und es funktioniert gut.Wann müssen wir die NDK für OpenCV Android

Ich habe das NDK installiert und einige der Beispiel-Apps, die es enthalten, ausgeführt.

Ich bin nicht klar, was wir für das NDK benötigen. Ich konnte nirgendwo in der Dokumentation eine Referenz finden.

Gibt es OpenCV-Funktionalität, die in der regulären Bibliothek 2.4.8 nicht verfügbar ist?

Ist es nur so können wir in C++ geschriebene Module verwenden, die andere zur Verfügung gestellt haben, ohne sie in Java umzuschreiben?

+0

Ndk wird verwendet, um die gemeinsamen Objektdateien (.so) zu generieren. Sobald Dateien generiert wurden, können Module in c/C++ zur Laufzeit über die native Java-Schnittstelle verwendet werden. –

+0

Danke, ich weiß das, aber welche Features von OpenCV brauchen C++? Speziell –

Antwort

5

Ich habe NDK für meine Anwendung verwendet und folgende sind meine Beobachtungen.

  1. Ja, es bietet den Vorteil der Verwendung von vielen C++ Module, die zur Verfügung gestellt werden.
  2. Wenn Sie bereits ein wenig von Erfahrung in Computer Vision Anwendung Programmierung mit OpenCV Bibliothek in C++ haben, müssen Sie nicht lernen, neue Syntax in Java (kann durchaus irritieren einige Male).
  3. Mit NDK für Ihre Anwendung Sie können in Bezug auf die
    Leistung eine leichte Oberhand geben, wenn die Verarbeitung Sie Bild tun rechen anspruchsvoll (ich bin mir nicht ganz sicher, dass dies etwa, weil die OpenCV Bibliothek für Android zur Verfügung gestellt ist nur ein Wrapper um die gleichen Header-Dateien und Zeug und sollte fast die gleiche Leistung wie NDK geben. ich habe im Vergleich nie wirklich die Leistung selbst aber haben in verschiedenen Blogs lesen, die NDK ist schneller).
  4. Eine Sache müssen Sie wirklich vorsichtig sein, wenn Sie NDK Anrufe von JAVA zu NDK Seite oder umgekehrt verwenden, können diese Anrufe in Bezug auf die Leistung wirklich teuer sein (Needs sorgfältige Planung).
  5. Passing einige Parameter wie Matrix von MAT von JAVA zu NDK sind ein wenig von Kopfschmerzen, aber Sie können einige Problemumgehungen finden.

Basierend auf diesen und anderen Faktoren, die Sie aus verschiedenen Quellen haben könnte und auch durch Ihre Programmierung Stärken herausgefunden, können Sie entscheiden, ob Sie NDK oder nicht verwenden möchten. Es gab nie wirklich eine Reihe von Leitlinien i das sagt finden könnten Sie NDK verwenden können, wenn so und so Bedingungen erfüllt sind, die Menschen, mit denen jemals Programmierung Stil beginnen gerade sind sie bequem mit.

+0

Danke, ich fühle, dass ich genug habe, um loszulegen. Ich habe festgestellt, dass es viel einfacher ist, C++ - Beispielcode zu finden. –

+1

Obwohl Sie mehr C++ Beispiele finden werden (viele von ihnen werden in Bezug auf den Fortschritt der OpenCV Bibliothek irgendwie veraltet sein), wird Java wesentlich einfacher zu programmieren sein, wenn Sie nicht bereits gute C++ Erfahrung haben. –

2

In Android Dokumentation Sie Tipps zum NDK verwenden, bei

# CPU-intensive operations that don't allocate much memory, 
# such as signal processing, physics simulation, and so on. 

Wenn alles, was Sie können tun wollen mit OpenCV built'in Funktionen berechnet werden, können Sie nicht NDK benötigen als Verarbeitungsroutinen von OpenCV bereits sind in C/C++.

Wenn Sie jedoch die Bildmatrix intensiv bearbeiten müssen (ich meine direkten Zugriff auf Pixel), werden Sie die Leistung mit dem NDK verbessern.

Verwandte Themen