如何在Android App中集成OpenCV Manager

Vij*_*007 32 android opencv

我在我的Android应用程序中使用OpenCV2.4.7库.当应用程序启动时,它将转到应用程序的Google Play商店,名为OpenCV Manager.有没有办法在我的Android apk中集成这个应用程序,因为我们已经使用OpenCV库,为什么app需要再次使用OpenCV Engine?他们有什么办法整合这个引擎吗?

Chi*_*hod 24

是.要在应用程序中集成OpenCV,并避免显式安装OpenCV管理器,您需要先阅读OpenCV提供的以下文档.

首先阅读 - > OpenCV的静态初始化

成功执行步骤后,您需要编写以下代码以在调用OpenCV API之前在应用程序初始化代码中启用OpenCV.例如,它可以在Activity类的静态部分中完成:

static {
    if (!OpenCVLoader.initDebug()) {
        // Handle initialization error
    }
}
Run Code Online (Sandbox Code Playgroud)

参考文献:

  1. http://answers.opencv.org/question/2033/use-opencv-on-android-without-manager/
  2. OpenCV Android上的静态初始化

编辑

根据Document中的新方案,并感谢@rozhok提供新信息,initDebug()方法不能用于生成构建

注意对于生产代码,不推荐使用此方法.它仅用于实验和本地开发目的.如果要使用异步初始化发布应用程序使用方法.

您需要使用以下方法

句法

static boolean initAsync(String Version, Context AppContext, LoaderCallbackInterface Callback)
Run Code Online (Sandbox Code Playgroud)

public class Sample1Java extends Activity implements CvCameraViewListener {

    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;
            }
        }
    };

    @Override
    public void onResume()
    {
        super.onResume();
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

参考

  1. http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html

  • @ChintanRathod:这种方法(使用async init)专门用于调用OpenCV管理器,如果在设备上找不到它.所以它不是"将opencv捆绑到应用程序"的解决方案.我已经尝试了旧的弃旧方式,它工作正常. (4认同)
  • 为什么不建议将此方法用于生产用途(根据文档)? (2认同)
  • 你试过吗?我试过,它要求我下载OpenCV管理器,这对我来说是不可接受的. (2认同)
  • 那么这将使用initDebug方法而不是initAsync在生产应用程序上工作吗?我发现有相关信息.我不希望在运行应用程序时提示我的用户安装OpenCV Manager,并且希望向应用程序发送所有需要的库和内容.initDebug是否适用于生产? (2认同)