[JAVA] Versuchen Sie, OpenCV in die Android-Anwendung einzuführen

Einführung

Ich bin es leid, Apps zu erstellen, die nur mit den Standardeinstellungen von Android Studio fertiggestellt werden können Verwenden Sie OpenCV, um Bilder zu erstellen und den Bereich der Apps zu erweitern. Installieren Sie es als Ausgangspunkt und probieren Sie es aus.

Fortsetzung von Gerätebild mit Android-App importieren

Umgebung

OpenCV 4.1.2 AndroidStudio 3.4.1

Installation

Ich habe auf diesen Artikel verwiesen. Installation und Import sind problemlos abgeschlossen.

Verwenden von OpenCV mit Android Studio

Im Mat-Format importieren

Im vorherigen Artikel habe ich Geräteimage-Daten mit Bitmap importiert. Konvertieren Sie diese Bitmap in das Mat-Format für die Verarbeitung mit OpenCV.

Die folgenden Methoden werden in der Utils-Klasse von android.package bereitgestellt, die in der OpenCV-Bibliothek enthalten ist. Verwenden Sie diese Option, um die Bitmap in Mat zu konvertieren. Durch Konvertieren des Bildes in das Mat-Format können Sie das Bild mithilfe der OpenCV-Bibliothek auf verschiedene Arten bearbeiten.

Utils.java


/**
 * Short form of the bitmapToMat(bmp, mat, unPremultiplyAlpha=false).
 * @param bmp is a valid input Bitmap object of the type 'ARGB_8888' or 'RGB_565'.
 * @param mat is a valid output Mat object, it will be reallocated if needed, so Mat may be empty.
 */
public static void bitmapToMat(Bitmap bmp, Mat mat) {
    bitmapToMat(bmp, mat, false);
}

Main.java


//bmp_img:Importierte Bitmap
//mat_img:Bereiten Sie Variablen im Mat-Format im Voraus vor
Utils.bitmapToMat(bmp_img,mat_img); 

Versuchen Sie es mit Mat

Dieses Mal werde ich versuchen, eine Anwendung zu erstellen, die ein Farbbild in Graustufen konvertiert, wenn Sie die Taste drücken. Welche Methode ich verwenden soll, werde ich ständig in der offiziellen Dokumentation suchen. Open Source Computer Vision Oder wenn Sie das gesamte Projekt mit [grau] mit installiertem OpenCV durchsuchen, werden Sie so etwas finden.

Dieses Mal wurden die folgenden Methoden in der Imageproc-Klasse vorbereitet.

Imageproc.java


public static void cvtColor(Mat src, Mat dst, int code) {
    cvtColor_1(src.nativeObj, dst.nativeObj, code);
}

Geben Sie im Argument des Codes eine Konstante an, welche Art von Konvertierung durchgeführt werden soll. Siehe die Liste der Konvertierungsmethoden in der Datei imageproc.hpp. Dieses Mal möchte ich von einem Farbbild in eine Graustufe konvertieren, also verwende ich COLOR_RGB2GRAY.

Main.java


Utils.bitmapToMat(bmp_img,mat_img); //bmp_img:Importierte Bitmap,mat_img:Bereiten Sie Variablen im Mat-Format vor
Mat mat_output = new Mat();
cvtColor(mat_img,mat_output,COLOR_RGB2GRAY);

Dies sollte das Bild "mat_img" in Graustufen konvertieren und in "mat_output" einfügen. Konvertieren Sie schließlich diesen mat_output erneut in eine Bitmap und geben Sie ihn in ImageView aus.

Main.java


private Mat mat_output = new Mat();

public void onClick(View v) {
    Utils.bitmapToMat(bmp_img,mat_img); //Von Bitmap in Mat konvertieren
    cvtColor(mat_img,mat_output,COLOR_RGB2GRAY);    //In GrayScale konvertieren
    Utils.matToBitmap(mat_output,bmp_img);  //Zurück zur Bitmap
    img_picture.setImageBitmap(bmp_img);    //Anzeige in ImageView
}

Ein Absturz ist aufgetreten!

Damit ist fertig! Ich dachte, aber als ich den Knopf drückte, kam es zu einem Absturz. Wenn ich versuche zu debuggen, tritt ein Absturz auf, wenn ich Mat überhaupt neu einrichte.

Blick auf die Fehlermeldung ... java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)

Es heißt, dass etwas wie Mat () nicht gefunden werden kann. Als ich mir den Stapelüberlauf ansah, als ich in Schwierigkeiten war, fand ich eine Person mit den gleichen Umständen. No implementation found for long org.opencv.core.Mat.n_Mat() error Using OpenCV

Um den Inhalt des Artikels zusammenzufassen

--OnCreate () wurde vor dem Laden der OpenCV-Bibliothek aufgerufen -Initialisieren Sie OpenCV asynchron mit ** OpenCVManager **

Was ich nach etwas mehr Recherche gefunden habe

--Dieser ** OpenCV Manager ** wird für jeden Benutzer separat installiert.

Ich versuchte es

Vorerst habe ich den in Stack Overflow geschriebenen Quellcode so verwendet, wie er ist. Als ich versuchte zu debuggen

  1. mLoaderCallback.onManagerConnected (LoaderCallbackInterface.SUCCESS) wird in OnResume () aufgerufen.
  2. Mat wird in onManagerConnected erstellt

Ich konnte den Fluss bestätigen.

Als ich dachte, dass ich beim Starten der App ** OpenCV Manager ** installieren müsste, gab es nichts. Außerdem wurde OpenCVLoader.initAsync in OnResume () nicht aufgerufen. (Ich habe es beim ersten Start verpasst ...?) Dies kann von der Version von Android oder OpenCV abhängen.

Ergebnis

Es ist fertig! Das Foto ist die Figur von "Ice Monstar" aus einem rasierten Eisladen in Taiwan? ist. Das Mango-rasierte Eis war wirklich gut, also probieren Sie es unbedingt aus, wenn Sie nach Taiwan gehen. gray.png

Schließlich

Es hat ein wenig gedauert, um die Umgebung zu erstellen, aber jetzt kann ich mit OpenCV umgehen. Wenn ich mir die offizielle Dokumentation anschaue, scheint es, dass eine riesige Bibliothek vorbereitet ist, daher möchte ich von nun an verschiedene Dinge ansprechen.

Recommended Posts

Versuchen Sie, OpenCV in die Android-Anwendung einzuführen
Einführung in die Android App-Entwicklung
Ich habe versucht, eine einfache Gesichtserkennungs-Android-Anwendung mit OpenCV zu erstellen
Android App: Versuchen Sie, Ereignisse und Hörer zusammenzufassen
Versuchen Sie, die Rails-App für EC2-Part 2 (Server Construction) bereitzustellen.
Führen Sie Docker in die Anwendung ein, die Sie erstellen
[Einführung] Erstellen Sie eine Ruby on Rails-Anwendung
Versuche Edelstein freizugeben
Einführung von Vue.js in Rails
Einführung in das Android-Layout
[Hinweis] Herausforderung bei der Entwicklung einer kommerziellen Andorid-App
Rails6 Ich habe versucht, Docker in eine vorhandene Anwendung einzuführen
Vorbereitung der Android-App-Entwicklung 7/15
[Einführung in die Android App-Entwicklung] Machen wir einen Zähler
So verwenden Sie OpenCV 4 unter Android und zeigen die Kamera live an
Versuchen Sie Spring Boot von 0 bis 100.
So führen Sie die Standardauthentifizierung ein
Stellen Sie Maven das Tomcat-Projekt vor
Stellen Sie die Anwendung auf WildFly bereit
Umschreiben von Applet zu Anwendung
[Android] Verbindung zu MySQL herstellen (unvollendet)
Ein Neuling versucht, die Android-Ansicht zusammenzufassen (Entwicklung von Android-Anfängern)
Versuchen Sie, mit JRuby eine plattformübergreifende Anwendung zu erstellen (Generierung von JAR-Dateien).
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)