1

Android プロジェクトで opencv を使用しようとしています。過去数週間に私が行ったイベントの完全なリストは次のとおりです。

1- I used my mobile phone camera to take a picture stored it as bitmap
2- Ran face detection on it
3- Now i was supposed to use android opencv to highlight the edges in the face detection bitmap

私はndkのことについてあまり知りません。私がしたことは、プロジェクト ワークスペースにインポートされた Android opencv SDK をダウンロードし、これをアプリケーションのライブラリ プロジェクトとして使用し、Android アプリケーションで次のコードを使用することだけでした。

 Bitmap canny_image = Bitmap.createBitmap(bmFace.getWidth(), bmFace.getHeight(), Config.ARGB_8888);
        canny_image = bmFace.copy(Config.ARGB_8888, true); 
        Mat mImg = new Mat();
        Utils.bitmapToMat(canny_image,mImg);

        //Converting to grayscale
        Mat mGray = new Mat(mImg.rows(), mImg.cols(), CvType.CV_8UC1, new Scalar(0));
        Imgproc.cvtColor(mImg , mGray, Imgproc.COLOR_BGRA2GRAY, 4); 
        //Applying Canny
        Imgproc.Canny(mGray, mGray, 80, 90);

        //Converting back to 4 channel image
        Imgproc.cvtColor(mGray , mImg, Imgproc.COLOR_GRAY2RGBA, 4); 
        canny_image.recycle();
        System.gc();
        canny_image = Bitmap.createBitmap(mImg.cols(), mImg.rows(), Bitmap.Config.ARGB_8888); 
        Utils.matToBitmap(mImg, canny_image); 

ただし、logcat は不満足なリンク エラーを示しています。hereのドキュメントを使用してください。

このリンクにはポイントがあります:

If your application project doesn’t have a JNI part, just copy the corresponding OpenCV native libs from <OpenCV-2.4.6-android-sdk>/sdk/native/libs/<target_arch> to your project directory to folder libs/<target_arch>.

In case of the application project with a JNI part, instead of manual libraries copying you need to modify your Android.mk file: add the following two code lines after the "include $(CLEAR_VARS)" and before "include path_to_OpenCV-2.4.6-android-sdk/sdk/native/jni/OpenCV.mk"

私も同じことをしました。私のアプリケーションでは、フォルダー libs を作成し、すべての .so および .h ファイルを /sdk/native/libs/ にコピーしました。

しかし、私のライブラリ プロジェクトには application.mk および android.mk ファイルが含まれていません。私のAndroidアプリケーションでopencvを使用する方法を完全に台無しにしています。リンクの問題は、コードにライブラリをロードしていないことが原因だと思いましたが、アプリケーションでこのコードを使用すると、例外が発生します。

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

上記と同じリンクから参照しました。専門家がこれについて私を助けてください。深刻な助けが必要です。ここでほぼ1週間立ち往生しています。Android アプリケーションで opencv を正常に使用するにはどうすればよいですか。私は何が欠けていますか?

4

1 に答える 1

0

このエラーは、ライブラリを初期化する前に呼び出すときに表示されます。ここを参照してください: Android UnsatisfiedLinkError with OpenCV 2.4.2 . 正解の下にあるコメント スレッドを参照してください。したがって、ライブラリを初期化してから、「Log.i(TAG, "OpenCV loaded successfully");」の下に実行したいことを追加します。

于 2014-06-24T04:29:00.017 に答える