我在Android应用中使用OpenCV2.4.7库。当应用程序启动时,它将转到应用程序的Google Play商店,名为OpenCV Manager。有没有办法在我的Android apk中集成这个应用程序,因为我们已经在使用OpenCV库了,为什么app需要再次使用OpenCV Engine?他们有什么方法可以整合这个引擎吗?
答案 0 :(得分:23)
是。要在应用程序中集成OpenCV,并避免显式安装OpenCV管理器,您需要先阅读OpenCV提供的以下文档。
首次阅读 - > Static Initialization of OpenCV 强>
在成功执行步骤之后,您需要编写以下代码以在调用OpenCV API之前在应用程序初始化代码中启用OpenCV。例如,它可以在Activity类的静态部分中完成:
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}
<强>参考文献:强>
根据Document中的新方案,并感谢@rozhok提供新信息, initDebug()方法不能用于生成构建
注意对于生产代码,不推荐使用此方法。它仅用于实验和本地开发目的。如果要使用异步初始化发布应用程序使用方法。
您需要使用以下方法
<强> 语法 强>
static boolean initAsync(String Version, Context AppContext, LoaderCallbackInterface Callback)
<强> 实施例 强>
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);
}
...
}
<强>参考强>
答案 1 :(得分:1)
这是文档中关于OpenCV Manager安装的说明:
apk 文件夹包含应安装在目标Android设备上的Android软件包,以通过OpenCV Manager API启用OpenCV库访问(详见下文)。
在可以访问Google Play Market(和Internet)的生产设备上,这些软件包将在使用OpenCV Manager API首次启动应用程序时从Market安装。
...
注意:从Internet安装是首选,因为OpenCV团队可能会在Market上发布此软件包的更新版本。
答案 2 :(得分:0)
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
include D:/opencv_with/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk
在当前项目目录中,libs文件夹复制OpenCV库中的所有文件夹。
添加您的活动
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
}
}
}
};
答案 3 :(得分:-5)
只需评论以下代码
中的行@Override
public void onResume()
{
super.onResume();
//OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
}