我正在阅读使用OpenCV for Android应用程序,我不确定这些库是否在启动时连接到应用程序本身,或者是否必须为每个用户下载openCV库。
这是我应该考虑的吗?我应该使用其他方法,还是我完全误解了这篇文章:http://www.embedded.com/design/programming-languages-and-tools/4406164/2/Developing-OpenCV-computer-vision-apps-for-the-Android-platform
答案 0 :(得分:0)
将OpenCv库动态链接到您的应用程序是使用OpenCv进行开发的最佳实践 所以每当有一个新的库更新时,它也会在你的应用程序中自动更新,
但是如果你不这样做,并且你想拥有一个固定的opencv库你就可以做到但是它已被弃用作为一种方法来逐步指导OpenCV4Android
答案 1 :(得分:0)
有两种方法可以使用OpenCV依赖开发应用程序。
首先,要求用户从Play商店下载OpenCV Manager(异步初始化)。
其次是静态初始化。
首先让我解释一下静态初始化。在静态初始化中,您将库包含在项目中。这意味着,无论用户需要什么库,您都可以将其与您的应用程序打包在一起。您可以按照以下步骤进行操作。
1)如果您的应用程序项目没有JNI部分,只需将相应的OpenCV本机库从/ sdk / native / libs /复制到项目目录到文件夹libs /。
2)如果应用程序项目带有JNI部分,而不是手动库复制,则需要修改Android.mk文件:在" include $(CLEAR_VARS)&#之后添加以下两个代码行: 34;之前"包括path_to_OpenCV-2.4.9-android-sdk / sdk / native / jni / OpenCV.mk"
看到第二种方法是在运行时加载库。该库将由OpenCV提供的名为OpenCV Manager的外部应用程序加载。代码段如下[也取自http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html]:
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);
}
...
}
OpenCVLoader.initAsync行将使用OpenCV Manager异步加载库。如果未安装,则用户将被重定向到Play商店。
异步初始化是编写OpenCV指南的人通常推荐的方式,因为这样做,你不需要为每个架构包含库,库也会更新。它打破了用户体验;程序的流程。
无论如何,请记住,在异步初始化中,您只能在加载库后开始使用与OpenCV关联的任何代码,从而在您收到SUCCESS状态后。因此,请相应地设计应用程序。