UnsatisfiedLinkError: n_Mat mientras se usa opencv2.4.3 con android 4.0

Estoy usando opencv en android. Pero cuando estoy agregando Mat () en mi código mi aplicación se detiene inesperadamente después del lanzamiento. Mi registro de error es como abajo:

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)` 

Mi código es

 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); } } 

}

He intentado otras soluciones que se proporcionan en stackoverflow pero ninguno de ellos funcionó para mí. Ya he copiado libopencv_java.so y libopencv_info.so en mi carpeta / libs de F: \ OpenCV-2.4.3.2-android-sdk \ sdk \ nativo \ libs \ armeabi-v7a pero este error sigue siendo el mismo.

por favor ayuda.

gracias por adelantado 🙂

Su bueno que alguien me incitó a publicar mi respuesta elaboradamente. Así que aquí estoy publicando la solución de mi pregunta:

 private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: { Log.i(TAG, "OpenCV loaded successfully"); startDisplay(); } break; default: { super.onManagerConnected(status); } break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { 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 successfull"); System.out.println(java.lang.Runtime.getRuntime().maxMemory()); } setContentView(R.layout.frameview); } 

El problema detrás de este error es que estamos llamando opencv función dependiente (por ejemplo: Mat ()) antes de la inicialización opencv por lo que su error de mostrar. Así que puedes solucionarlo si pones tu función opencv en onManagerConnected () así:

 Log.i(TAG, "OpenCV loaded successfully"); startDisplay(); 

Aquí, startDisplay () contiene mi Mat () inicialización. El problema es que cuando se inicia una aplicación, entonces la función oncreate () se ejecuta primero y después de que se carga opencv, así que si pones tu función opencv en oncreate () entonces mostrará error como opencv todavía no está cargado.

Espero que esto solucione su problema. Lo mejor de la suerte … Stackoverflow Rocks !!! 🙂

  • Error: Programa "/ndk-build.cmd" no se encuentra en PATH
  • Error de OpenCV / Android BufferQueue: La textura de la superficie ha sido abandonada
  • Números digitales en Tesseract OCR
  • ¿Por qué OpenCV Manager y neon necesitan en android?
  • Creación de un paquete de biblioteca de Android que incluye un paquete externo (nativo o Java)
  • OpenCV2.4 con la actividad de Android Native
  • UnsatisfiedLinkError: Método nativo no encontrado - Android
  • Eclipse da error al usar GaussianBlur con OpenCV para Android
  • Procesamiento de imágenes OpenCV en el servicio de Android
  • Obteniendo una imagen mediana de la secuencia de imágenes con OpenCV
  • OpenCV Android NDK Project no creará
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.