【问题标题】:Using Opencv in android for edge detection在android中使用Opencv进行边缘检测
【发布时间】:2013-09-02 06:12:39
【问题描述】:

我正在尝试在我的 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;
        }
    }
};

引用自我上面提到的同一链接。 请高手帮帮我。我需要一些认真的帮助。被困在这里差不多一个星期了。如何在我的 android 应用程序中成功使用 opencv。我错过了什么?

【问题讨论】:

  • 把文件 Android.mk 和 Application.mk
  • "我创建了一个文件夹 libs 并复制了 /sdk/native/libs/ 中的所有 .so 和 .h 文件" 以防万一,请务必保留 /sdk/native/libs 中的文件夹架构目录:你应该有libs/armeabilibs/armeabi-v7a等文件夹。

标签: android opencv android-ndk


【解决方案1】:

在初始化之前调用库时会显示此错误。 请参阅此处:Android UnsatisfiedLinkError with OpenCV 2.4.2。请参阅正确答案下方的评论线程。因此,让库初始化,然后在 "Log.i(TAG, "OpenCV 加载成功");" 下添加你想做的任何事情

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 2018-12-12
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    相关资源
    最近更新 更多