[JAVA] Essayez d'introduire OpenCV dans l'application Android

introduction

Je suis fatigué de créer des applications qui peuvent être complétées uniquement avec les paramètres par défaut d'Android Studio, alors Utilisez OpenCV pour créer des images et élargir la gamme d'applications. Installez-le comme point de départ et essayez-le.

Poursuite de Importer l'image de l'appareil avec l'application Android

environnement

OpenCV 4.1.2 AndroidStudio 3.4.1

Installation

J'ai fait référence à cet article. L'installation et l'importation sont terminées sans aucun problème.

Utilisation d'OpenCV avec Android Studio

Importer au format Mat

Dans l'article précédent, je suis allé jusqu'à importer des données d'image de périphérique avec bitmap. Convertissez ce bitmap au format Mat pour la gestion avec OpenCV.

Les méthodes suivantes sont fournies dans la classe Utils de android.package incluse dans la bibliothèque OpenCV. Utilisez ceci pour convertir le bitmap en Mat. En convertissant l'image au format Mat, vous pourrez modifier l'image de différentes manières à l'aide de la bibliothèque OpenCV.

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:Bitmap importé
//mat_img:Préparez les variables de format de tapis à l'avance
Utils.bitmapToMat(bmp_img,mat_img); 

Essayez d'utiliser Mat

Cette fois, je vais essayer de créer une application qui convertit une image couleur en échelle de gris lorsque vous appuyez sur le bouton. Quant à la méthode à utiliser, je chercherai régulièrement dans la documentation officielle. Open Source Computer Vision Ou si vous recherchez le projet entier avec [gris] avec OpenCV installé, vous trouverez quelque chose comme ça.

Cette fois, les méthodes suivantes ont été préparées dans la classe Imageproc.

Imageproc.java


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

Dans l'argument du code, mettez une constante du type de conversion à effectuer. Reportez-vous à la liste des méthodes de conversion dans le fichier imageproc.hpp. Cette fois, je veux convertir une image couleur en une échelle de gris, donc j'utiliserai COLOR_RGB2GRAY.

Main.java


Utils.bitmapToMat(bmp_img,mat_img); //bmp_img:Bitmap importé,mat_img:Préparer les variables de format de tapis
Mat mat_output = new Mat();
cvtColor(mat_img,mat_output,COLOR_RGB2GRAY);

Cela devrait convertir l'image mat_img en niveaux de gris et la mettre dans mat_output. Enfin, convertissez à nouveau ce mat_output en bitmap et affichez-le dans ImageView.

Main.java


private Mat mat_output = new Mat();

public void onClick(View v) {
    Utils.bitmapToMat(bmp_img,mat_img); //Convertir de Bitmap en Mat
    cvtColor(mat_img,mat_output,COLOR_RGB2GRAY);    //Convertir en GrayScale
    Utils.matToBitmap(mat_output,bmp_img);  //Retour à Bitmap
    img_picture.setImageBitmap(bmp_img);    //Afficher dans ImageView
}

Un crash s'est produit!

Ceci est terminé! J'ai pensé, mais au moment où j'ai appuyé sur le bouton, un crash s'est produit. Lorsque j'essaie de déboguer, un plantage se produit lorsque je suis nouveau Mat en premier lieu.

En regardant le message d'erreur ... 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__)

Il dit que quelque chose comme Mat () ne peut pas être trouvé. Quand j'ai regardé le débordement de pile quand j'étais en difficulté, j'ai trouvé une personne avec les mêmes circonstances. No implementation found for long org.opencv.core.Mat.n_Mat() error Using OpenCV

Pour résumer le contenu de l'article

--OnCreate () a été appelé avant le chargement de la bibliothèque OpenCV -Initialiser OpenCV de manière asynchrone en utilisant ** OpenCVManager ** --Exécutez BaseLoaderCallback avant OnCreate () et déclarez une instance de Mat () dedans. --Vérifiez si OpenCV est installé à chaque fois avec OnResume ()

Ce que j'ai trouvé après un peu plus de recherche

--Ce ** OpenCV Manager ** est installé séparément pour chaque utilisateur.

Je l'ai essayé

Pour le moment, j'ai utilisé le code source écrit dans Stack Overflow tel quel. Quand j'ai essayé de déboguer

  1. mLoaderCallback.onManagerConnected (LoaderCallbackInterface.SUCCESS) est appelé dans OnResume ()
  2. Le tapis est créé dans onManagerConnected

J'ai pu confirmer le flux.

Quand j'ai pensé que je devrais installer ** OpenCV Manager ** lors du démarrage de l'application, il n'y avait rien. En outre, OpenCVLoader.initAsync dans OnResume () n'a pas été appelé. (Je l'ai manqué au premier démarrage ...?) Cela peut dépendre de la version d'Android ou d'OpenCV.

résultat

C'est fait! La photo est le personnage de "Ice Monstar" d'un magasin de glace pilée à Taiwan? est. La glace pilée à la mangue était vraiment bonne, alors assurez-vous de la vérifier lorsque vous allez à Taiwan. gray.png

finalement

Il a fallu un peu de temps pour créer l'environnement, mais maintenant je peux gérer OpenCV. En regardant la documentation officielle, il semble qu'une énorme bibliothèque est préparée, donc je voudrais aborder diverses choses à partir de maintenant.

Recommended Posts

Essayez d'introduire OpenCV dans l'application Android
Introduction au développement d'applications Android
J'ai essayé de créer une simple application Android de reconnaissance faciale en utilisant OpenCV
Application Android: essayez de résumer les événements et les auditeurs
Essayez de déployer l'application Rails sur EC2-Part 2 (Server Construction) -
Présentez docker à l'application que vous créez
[Introduction] Créer une application Ruby on Rails
Essayez de libérer la gemme
Présentation de Vue.js à Rails
Introduction à la mise en page Android
[Note] Défi pour développer une application commerciale Andorid
Rails6 J'ai essayé d'introduire Docker dans une application existante
Préparation au développement d'applications Android 7/15
[Introduction au développement d'applications Android] Faisons un compteur
Comment utiliser OpenCV 4 sur Android et afficher la vue en direct de la caméra
Essayez Spring Boot de 0 à 100.
Comment introduire l'authentification de base
Présentez Maven au projet Tomcat
Déployer l'application sur WildFly
Réécriture de l'applet à l'application
[Android] Connectez-vous à MySQL (non terminé)
Un nouveau venu tente de résumer la vue Android (développement d'applications Android pour débutants)
Faisons une application multiplateforme avec JRuby (génération de fichier jar)
J'ai essayé de créer une application Android avec MVC maintenant (Java)