b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

android libs Android Studio 2.2 中利用CAMKE进行O

电脑杂谈  发布时间:2018-01-07 07:10:36  来源:网络整理

libs_android libs_androidstudio开发app

我在一文中提到了如何在Android Studio中Java层导入OpenCV(包含opencv_contrib部分),但是这仅仅是Java层的导入,随着学习的深入,我们可以渐渐的发现OpenCV库对Java的支持不是很给力,比如我使用SIFT算法时,一般提取出来的特征点有一万多个,这其中包含了大量的无效特征点,如果我想指定特征点的数目,比如说500个(经过测试,Java中利用OpenCV提取特征点默认为500),但是OpenCV Java库中并没有提供这样的方法(或者是我没有发现,如果有大神知晓,还望告知)。但是在C++中,是可以给SIFT指定特征点的,这里面就需要有一个在Java中调用C++的功能,Java中我们知道可以利用JNI或者JNA解决,那么在Androd中我们便可以利用NDK做到Java对C++的调用。

在Android Studio 2.2之前,我们通常是通过Android.mk和Application.mk两个文件设置本地开发;但是在Android Studio 2.2之后的版本,加入了利用CMAKE配置编译NDK项目的方法,这无疑是一个很好的消息,我们终于可以抛弃之前那种繁琐的方法啦,本篇文章只要讲的就是在Android Studio中利用CMAKE进行OpenCV的NDK开发。android libs

首先,我们需要在Android Studio中配置CMAKE、NDK工具,打开Android Studio 2.2,点击按钮打开SDK Manager,在SDK Platforms中选择你所需要的Android版本,这里我使用的是Android 7.0。

在SDK Tools中选择红框标出的部分(这里推荐SDK Manager当中提供的NDK,NDK安装好后路径为<Android SDK Path>\ndk-bundle):

创建一个新项目,在创建的过程中,我们需要勾选Include C++ Support,之后的步骤默认即可,可以与相应正,写的不是很好,大家见谅。

androidstudio开发app_android libs_libs

项目创建成功之后,会自动在app\src\main下建立一个名为cpp的文件夹,其中包含一个native-lib.cpp文件。同时,在app目录下会多出一个CMakeLists.txt文件,Android Studio调用CMAKE利用该文件来协调C++代码的编译(默认使用Clang编译),并将产生的.so文件提供给apk文件的打包过程。

然后需要在Java层导入OpenCV,OpenCV 3.2 Android SDK可以选用之前编译好的库,下载地址:https://pan.baidu.com/s/1kVOejLt;在Android Studio中点击File -> New… -> Import Module,然后在Source Directory中选取<OpenCV 3.2 Android SDK>\sdk\java目录,这时Module Name就会自动变成“openCVLibrary320”,之后的步骤采用默认设置即可。

刚刚导入OpenCV包之后,Android Studio会尝试自动编译,由于其默认的build.gradle文件设置并不适合最新版本,所以会报错。修改openCVLibrary320\build.gradle为如下内容就会纠正这些错误(红框标出的部分需要与app\build.gradle一致)。

点击File -> Project Structure,在左边的Modules中点击“app”,然后点击右边的加号,再选择Module Dependency,然后在弹出框中选择:openCVLibrary320。这样,就为我们的项目app在Java层上添加了OpenCV支持(其中library是我使用的另外一个库,不用理会)。

首先,需要将应用OpenCV C++所需要头文件和库文件全部复制到项目中,将<OpenCV 3.2 Android SDK>\sdk\native\jni\include文件夹复制到app\src\main\cpp当中,把<OpenCV 3.2 Android SDK>\sdk\native\libs文件夹复制到app\src\main当中,并将文件夹重命名为jniLibs。

libs_androidstudio开发app_android libs

然后将app\build.gradle修改为(各位看官可以对比修改):

app\CMakeLists.txt修改为:

配置部分就此完成了,贴一下关键部分的代码吧,NDK帮助类OpenCVNDKHelper:

C++文件native-lib.cpp:

这段代码主要的作用就是提取Sift特征。

PS:文章中使用的jniLibs是直接拷贝到目录中的,这个项目的存储空间就比较大了,大约1G左右,每次新建项目都需要重新拷贝,大家也可以用软链接或者绝对路径代替,这里就不多介绍啦。android libs但是最终生成的APK文件大小是差不多的。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-58772-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...