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
OpenCV 4.1.2 AndroidStudio 3.4.1
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
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);
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
}
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.
Pour le moment, j'ai utilisé le code source écrit dans Stack Overflow tel quel. Quand j'ai essayé de déboguer
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.
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.
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