要在手机上使用图像处理,OPENCV跑的有点慢,听说fastcv对ARM进行了专门的优化,因此着手改用fastcv来进行部分函数替换。第一步搭建环境搞了好久。
fastcv官网上是使用Eclipse作为开发环境,无奈Eclipse用的越来越少,自己已经换很长时间才搭建好android studio的环境,不想再折腾一边了,只能试着用android studio来搞了。
1。装好该装的,使用fastcv就是使用JNI,按照网上搜索的JNI环境搭建,把JNI环境搭好。参考文章:https://www.cnblogs.com/yishujun/p/5489536.html
2。创建Native C++工程。Native C++工程可以自动会自动生成CMakelists文件和c++文件,可以直接使用编译,如果能够正常编译证明工程搭建好了。
3。将fastcv的lib文件和h文件考到工程。将fastcv.h拷贝到CPP目录下。lib文件拷贝到特定目录,这个特定目录很关键。后续会有说明。
4。修改CMakelists.txt。增加如下内容:
添加fastcv库,静态库,导入 add_library(fastcv STATIC IMPORTED) 设置库目录 set_target_properties(fastcv PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${CMAKE_ANDROID_ARCH_ABI}/libfastcv.a )
${CMAKE_CURRENT_SOURCE_DIR} 目录为cpp文件所在的目录
${CMAKE_ANDROID_ARCH_ABI}为编译的类型,这个很关键,如果缺少这个编译肯定会报链接错误
这个在app目录下的build.gradle的defaultConfig节点的ndk决定的,如果没有可以添加。
ndk{ abiFilters "arm64-v8a", "armeabi-v7a" }
android studio自动会编译四种体系架构的文件,如果不制定架构,只能有一种架构能够链接成功,其它几种肯定会找不到函数的。
只要将.a 文件放到libs下面的arm64-v8a目录和armeabi-v7a目录内就可以了。不能添加x86和x86_64,两者都是so文件不是libfastcv.a。因此也链接不到。
做完这些就可以愉快的调用fastcv的函数了。