2016-01-29 15 views
13

Sto utilizzando OpenCV per adaptiveThreshold. Il mio codice per l'elaborazione delle immagini utilizzando OpenCV è come questo:Nessuna implementazione trovata per errore lungo org.opencv.core.Mat.n_Mat() Utilizzo di OpenCV

imageMat=new Mat(); 
Utils.bitmapToMat(bmp, imageMat); 
Imgproc.cvtColor(imageMat, imageMat, Imgproc.COLOR_BGR2GRAY); 
Imgproc.GaussianBlur(imageMat, imageMat, new Size(3, 3), 0); 
Imgproc.adaptiveThreshold(imageMat, imageMat, 255,Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 5, 4); 

Ma sto ottenendo un errore durante dichiarando Mat. Come:

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__) 
     at org.opencv.core.Mat.n_Mat(Native Method) 
     at org.opencv.core.Mat.<init>(Mat.java:24) 
     at com.example.pial_pc.instantbookreview.ImageCapture$3.onPictureTaken(ImageCapture.java:105) 

Come nuovo a OpenCV, non sto capendo chiaramente error.The intera classe java in cui questo codice appartiene è here.

Cosa devo fare per eliminare l'errore?

risposta

26

devo eliminare con successo l'errore e la mia app non va in crash durante l'esecuzione di questa linea imageMat=new Mat();

La ragione per l'errore è che Android chiama il metodo "onCreate" prima di caricare l'OpenCV4Android library.So ho usato Async Inizializzazione di OpenCV usando OpenCVManager. Ho creato BaseLoaderCallback prima del metodo onCreate. E dentro che ho dichiarato nuovo Mat() come questo:

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { 
    @Override 
    public void onManagerConnected(int status) { 
     switch (status) { 
      case LoaderCallbackInterface.SUCCESS: 
      { 
       Log.i("OpenCV", "OpenCV loaded successfully"); 
       imageMat=new Mat(); 
      } break; 
      default: 
      { 
       super.onManagerConnected(status); 
      } break; 
     } 
    } 
}; 

Poi nel onResume() ho controllato se libreria OpenCV essere stato caricato e inizializzato dall'interno pacchetto dell'applicazione corrente o meno. I codici sono i seguenti:

public void onResume() 
{ 
    super.onResume(); 
    if (!OpenCVLoader.initDebug()) { 
     Log.d("OpenCV", "Internal OpenCV library not found. Using OpenCV Manager for initialization"); 
     OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback); 
    } else { 
     Log.d("OpenCV", "OpenCV library found inside package. Using it!"); 
     mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); 
    } 
} 

E il mio errore è sparito. La mia classe java completamente aggiornata è here.

link di riferimento:

  1. Async Initialization of OpenCV on Android using OpenCVManager
  2. Tutorial1Activity.java
4
aggiungere questo codice prima onCreate metodo

Initialize OpenCV biblioteca nella vostra attività ()

 static { 
      if (!OpenCVLoader.initDebug()) { 
      // Handle initialization error 
      } 
      } 

aggiungi questa lib nel tuo progetto: https://github.com/hschott/Camdroid

Problemi correlati