在Android Java应用程序中使用OpenCV Mat。 OpenCV Mat

时间:2016-06-13 10:38:14

标签: java android c++ opencv

我正在用java开发一个Android应用程序,它调用本机c库中的函数。本机函数需要一个指向Opencv Mat类型的指针,因此我需要能够在我的Java应用程序中创建Opencv Mat类型以传递给本机库。

我正在使用Android Studio,我已将'opencv library'.jar文件添加到我项目的libs文件夹中。所以我可以导入所需的Opencv模块并创建Opencv Mat类型/访问其功能。问题是在运行时我遇到以下错误:

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

我读过Opencv .jar文件只是本机功能的包装器,应用程序需要“本机库”。我如何找到/添加这个?我需要将什么添加到项目中,以便Application可以在运行时找到Opencv Mat类定义?我只想使用OpenCV Mat类型而不是其他任何东西。

我已阅读有关设置OpenCV Android的教程,但这些需要在Android设备上安装OpenCV Manager应用程序,但这对我来说可能是一个问题,因为我无法访问将安装我的应用程序的设备并且不会在这些设备上安装OpenCV Manager App。相反,是否只有一个'.so'库可以添加到我的Android Studio项目中,它将与我的项目捆绑在一起,并允许应用程序在运行时找到所需的Mat类,这就是我需要的所有内容?

提前致谢。

1 个答案:

答案 0 :(得分:1)

有三种方法可以在您的应用中包含OpenCV

  1. 使用NDK编译opencv并编写自己的包装器以包含opencv c ++代码。
  2. 导入Android Opencv SDK提供的OpenCV java包装器模块,并将其连接到手机上安装的Opencv管理器。
  3. 导入Android Opencv SDK提供的OpenCV java包装器模块,并复制项目中的本机库。
  4. 对于选项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工作室项目中设置opencv android sdk -

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

    OpenCV in Android Studio

    大多数opencv功能都可以使用java包装器直接访问。所以你可能不需要将任何Mat传递给本机C函数。如果您仍想调用本机函数,可以参考Opencv Java包装器获取帮助,甚至可以参考SDK提供的示例以便进一步理解。