J'utilise opencv dans android. mais quand j'ajoute Mat() dans mon code mon application s'arrête de manière inattendue après le lancement. mon journal d'erreur est comme ci-dessous:UnsatisfiedLinkError: n_Mat en utilisant opencv2.4.3 avec android 4.0
FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: n_Mat
at org.opencv.core.Mat.n_Mat(Native Method)
at org.opencv.core.Mat.<init>(Mat.java:441)
at com.example.imagepro.MainActivity.onCreate(MainActivity.java:36)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
at android.app.ActivityThread.access$600(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)`
mon code est
import java.io.File;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Mat;
import org.opencv.android.Utils;
import org.opencv.imgproc.Imgproc;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
final String TAG = "Hello World";
Mat imgToProcess;
private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
// Create and set View
setContentView(R.layout.activity_main);
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
super.onCreate(savedInstanceState);
Log.i(TAG, "Trying to load OpenCV library");
if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mOpenCVCallBack))
{
Log.e(TAG, "Cannot connect to OpenCV Manager");
}
else{ Log.i(TAG, "opencv successfully added"); }
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String path = Environment.getExternalStorageDirectory()+ "/Koala.jpg"; // get image from sd card
File imgFile = new File(path);
View v = null;
if(imgFile.exists())
{
Bitmap myBitmap = BitmapFactory.decodeFile(path);
ImageView myImage = (ImageView) findViewById(R.id.imageView);
myImage.setImageBitmap(myBitmap);
Log.i(TAG, "opencv successfull 1");
Mat imgToProcess = new Mat();
Mat newmat = new Mat();
Utils.bitmapToMat(myBitmap, imgToProcess);
Imgproc.cvtColor(imgToProcess, newmat, Imgproc.COLOR_RGB2GRAY);
Bitmap outImage = Bitmap.createBitmap(newmat.rows(),newmat.cols(),Bitmap.Config.ARGB_8888);
Utils.matToBitmap(newmat, outImage);
myImage.setImageBitmap(outImage);
}
}
}
j'ai essayé d'autres solutions proposées sur stackoverflow, mais aucun d'entre eux travaillaient pour moi. J'ai déjà copié libopencv_java.so et libopencv_info.so dans mon dossier/libs à partir de F: \ OpenCV-2.4.3.2-android-sdk \ sdk \ natif \ libs \ armeabi-v7a mais cette erreur reste la même.
aidez s'il vous plaît.
merci à l'avance :)
Vérifiez la question [ici] (http://stackoverflow.com/questions/11614227/android-unsatisfiedlinkerror-with-opencv-2-4-2). J'avais les mêmes problèmes et j'ai isolé le problème à la ligne: Mat m = new Mat(); Mat m = null; et Mat m; fonctionne mais je n'en ai pas besoin. Quoi qu'il en soit, essayez le [lien] (http://stackoverflow.com/questions/11614227/android-unsatisfiedlinkerror-with-opencv-2-4-2) Je vous ai donné. ça a marché pour moi. –
merci pour votre réponse ... mais j'ai essayé aussi. j'ai lié opencv lib et l'ai initialisé aussi. Mais hier, j'ai résolu ce problème après tant de débogage ... le problème était que j'appelais ma fonction dépendante d'opencv dans oncreate(). mais je l'ai retiré de là et l'ai appelé onmanagerconnected() après setcontentview(), il a commencé à fonctionner. je pense qu'opencv lib initialisation a lieu après sur créer dans onmanagerconnected(). J'étais nouveau dans ce domaine, donc je ne le savais pas. – AnShU
@AnShU, pouvez-vous poster votre réponse et l'accepter vous-même? Je veux voir ce code où vous avez placé votre code d'initialisation. –