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
- Android Yuv420sp a ARGB en OpenCV
- Animar la imagen de la cara - usando deformación?
- No se puede reanudar la actividad en orden aleatorio
- La cámara no está abierta - Inicialización estática en OpenCV Android
- Reconocimiento Óptico de Caracteres Android con OpenCV
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 🙂
- ¿Cuál es la diferencia entre `opencv.android.JavaCameraView` y` opencv.android.NativeCameraView`
- Construya un subconjunto de OpenCV solamente (en particular para Android)
- Convertir código OpenCV de C ++ a Java
- Transformación de perspectiva
- Problema al usar OpenCV2.3.1 con la actividad de Android Native
- Umbral adaptable rápido para Canny Edge Detector en Android
- Reducción de la reflexión de luz OpenCV
- Bibliotecas de procesamiento y filtrado de video
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 !!! 🙂
- Cambiar de fragmento con fragmento de mapa deja una pantalla negra
- Error al importar proyecto en android studio?