2016-06-13 7 views
0

私は、ネイティブCライブラリの関数を呼び出すJavaでAndroidアプリケーションを開発しています。ネイティブ関数は、Opencv Matタイプへのポインタを必要とするので、JavaアプリケーションでOpenCv Matタイプを作成してネイティブライブラリに渡す必要があります。Android JavaアプリケーションでOpenCV Matを使用します。 NoClassDefFound Error with OpenCV Mat

私はAndroid Studioを使用しています。私は 'opencv library' .jarファイルをプロジェクトのlibsフォルダに追加しました。だから、私は必要なOpencvモジュールをインポートし、Opencv Matタイプを作成したり、その関数にアクセスすることができます。私はOpenCVの.jarファイルは、ネイティブ機能単なるラッパーであり、アプリケーションは、「ネイティブライブラリ」を必要とすることを読んだ

java.lang.NoClassDefFoundError: org.opencv.core.Mat 

:この問題は、実行時に、私は次のエラーを取得しています。これを見つける/追加するにはどうすればいいですか?アプリケーションが実行時にOpencv Matクラス定義を見つけることができるように、私のプロジェクトに追加する必要があるのは何ですか?私はOpenCV Matタイプだけを使いたいだけです。

私はOpenCV Androidのセットアップに関するチュートリアルを読んだことがありますが、これらはAndroidデバイスにOpenCV Manager Appをインストールする必要がありますが、これは私のアプリがどこにあるデバイスにアクセスできないので問題ですOpenCV Manager Appはこれらのデバイスにインストールされません。代わりに、自分のAndroid Studioプロジェクトに追加できる「.so」ライブラリがあります。このライブラリは、プロジェクトにバンドルされ、実行時に必要なMatクラスを見つけることができます。

ありがとうございます。

答えて

1

は、OpenCVのをコンパイルしてOpenCVのC++コードが含まれるように、独自のラッパーを記述するためのアプリ

  1. 使用NDKでOpenCVのを含めるための3つの方法があります。
  2. Android Opencv SDKで提供されているOpenCV Javaラッパーモジュールをインポートし、携帯電話にインストールされているOpencvマネージャに接続します。
  3. Android Opencv SDKが提供するOpenCV Javaラッパーモジュールをインポートし、プロジェクト内のネイティブライブラリをコピーします。

オプション1では、ndkプロジェクトをセットアップする必要があります。 2、3のためには、単にOpenCVのAndroidのモジュールをインポートすることができますし、呼び出すことによって、あなたのコードでそれを初期化する -

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

あなたのAndroid Studioプロジェクトで、セットアップのOpenCVのAndroidのSDKには、以下のリンクを参照してください -

http://blog.codeonion.com/2015/11/25/creating-a-new-opencv-project-in-android-studio/

OpenCV in Android Studio

ほとんどのopencv機能には、Javaラッパーを使用して直接アクセスできます。したがって、ネイティブC関数にMatを渡す必要はありません。それでもネイティブ関数を呼びたい場合は、Opencv Javaラッパーでヘルプを参照してください。

+1

他にもいくつかのライブラリが必要な場合はもちろん、JavaCVのような他のopencvラッパーライブラリを使用することもできます。 –

+0

ありがとう!私はオプション3はおそらく私が探しているものだと思います。どのネイティブライブラリをコピーするのか、リンクがどこに役立つのかは不明でした。 – CSharp