如何在Android应用程序中集成OpenCV管理器
我在Android应用程序中使用OpenCV2.4.7库。当应用程序启动时,它会转到名为OpenCV Manager的应用程序的Google Play商店。因为我们已经在使用OpenCV库,所以有没有办法将这个应用程序集成到我的Android apk中呢?为什么应用程序再次需要OpenCV引擎呢?他们有没有办法集成这个引擎?有。要在应用程序中集成OpenCV,并避免显式安装OpenCV管理器,您需要首先阅读OpenCV提供的以下文档 第一次读取-> 在成功执行步骤之后,在调用OpenCV API之前,需要编写以下代码以在应用程序初始化代码中启用OpenCV。例如,可以在Activity类的static部分完成:如何在Android应用程序中集成OpenCV管理器,android,opencv,Android,Opencv,我在Android应用程序中使用OpenCV2.4.7库。当应用程序启动时,它会转到名为OpenCV Manager的应用程序的Google Play商店。因为我们已经在使用OpenCV库,所以有没有办法将这个应用程序集成到我的Android apk中呢?为什么应用程序再次需要OpenCV引擎呢?他们有没有办法集成这个引擎?有。要在应用程序中集成OpenCV,并避免显式安装OpenCV管理器,您需要首先阅读OpenCV提供的以下文档 第一次读取-> 在成功执行步骤之后,在调用OpenCV API
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}
参考文献:
编辑
根据文档中的新场景,感谢@rozhok提供的新信息,initDebug()方法不能用于生产构建
注意:对于生产代码,不推荐使用此方法。它仅为实验和本地开发目的而设计。如果您想发布应用程序,请使用异步初始化方法
为此,您需要使用以下方法
语法
示例
参考资料
只需注释以下代码中的行即可
@Override
public void onResume()
{
super.onResume();
//OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
}
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
include D:/opencv_with/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk
if (!OpenCVLoader.initDebug()) {
Log.d("ERROR", "Unable to load OpenCV");
} else {
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
//Your opencv Operation code
}
}
}
};
以下是文档中关于OpenCV Manager安装的说明: apk文件夹中包含应安装在目标Android设备上的Android软件包,以便通过OpenCV管理器API访问OpenCV库(请参阅下面的详细信息) 在可以访问Google Play Market(和Internet)的生产设备上,这些软件包将在使用OpenCV Manager API的应用程序第一次启动时从市场上安装 注意:从Internet安装是最好的方式,因为OpenCV团队可能会在市场上发布此软件包的更新版本
你可以在这里阅读更多信息:谢谢你,伙计。它起作用了!嘿,你找到适合生产版本的解决方案了吗?在接受的答案中的链接中指出,“它主要是为开发目的而设计的。这种方法对于生产代码是不推荐的,建议发布包通过…”与OpenCV Manager通信。”这里是一种逐步的方式,用插图说明你应该得到什么:为什么不推荐这种方法用于生产(根据文档)?你试过了吗?我已经试过了,但它要求我下载OpenCV管理器,这对我来说是不可接受的。@ChintanRathod:这种方法(使用async init)用于在设备上找不到OpenCV管理器时调用它。因此,它不是“将opencv捆绑到应用程序”的解决方案。我已经尝试了一种很好的旧的不推荐的方法,它工作得很好。那个么使用initDebug方法而不是initAsync在生产应用程序上工作吗?我在这方面发现了相互矛盾的信息。我不想让我的用户在运行应用程序时被提示安装OpenCV Manager,我想在应用程序中附带所有需要的库和内容。initDebug在生产环境中工作吗?
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
include D:/opencv_with/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk
if (!OpenCVLoader.initDebug()) {
Log.d("ERROR", "Unable to load OpenCV");
} else {
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
//Your opencv Operation code
}
}
}
};