Linux 混合编译opencv与opencv_contrib的android版本
一、该方法只能编译.a文件
使用该脚本:https://github.com/tzutalin/build-opencv-for-android
1 $ git clone https://github.com/tzutalin/build-opencv-for-android.git 2 $ cd build-opencv-for-android 3 $ ./setup.sh 3.3.1
而后配置android ndk的路径
export ANDROID_NDK=./
而后运行脚本即可
./build-android-opencv.sh
二、可同时编译.a和.so
编译环境准备
- OpenCV 3.1.0源码(假定目录为<opencv-souce>)
- OpenCV_contrib 3.1.0源码(假定目录为<opencv-contrib>)
- cmake-gui 3.8.2 cmake的GUI工具
- Mingw 编译工具(假定目录为<mingw-dir>)
- Android NDK r12b 或者最新(假定目录为<ndk-dir>)
- Android SDK >=19(假定目录为<sdk-dir>)
- Android Studio
- Java ANT 1.9.9(假定目录为<ant-dir>)
以上你是需要准备编译的基础环境,下面分别讲解一下:
1.OpenCV源码
1
2
3
|
cd <opencv-source>;
git clone https://github.com/opencv/opencv.git
git checkout -b "3.1.0" "3.1.0"
|
2.OpenCV_contrib源码
1
2
3
|
cd <opencv-contrib>;
git clone https://github.com/opencv/opencv-contrib.git
git checkout -b "3.1.0" "3.1.0"
|
PS> 注意我们看到这里我采用的是opencv和opencv_contrib的3.1.0版本,主要的原因是opencv3.0.0和
3.2.0在实践中会遇到各种莫名其妙的原因,很难进行下去(比如opencv3.2.0目前还很难用mingw编译),这一块的摸索花了我大量的时间,所以我建议你也统一使用3.1.0版本。
3.cmake-gui工具
去到cmake官网下载3.8.2版本的cmake-64位工具:https://cmake.org/files/v3.8/cmake-3.8.2-win64-x64.msi
4.MinGW
MinGW是Windows下的GCC编译工具,去到Sourceforge下载MinGW的管理工具mingw-get-setup.exe。配置mingw的目录为<mingw-dir>,并将<mingw-dir/bin>添加进系统变量。
PS> 注意你可以选择mingw32或者mingw64都是可以的。我后续采用的是mingw32。也就是安装选项中的:
5.Android NDK
NDK的官方介绍是:
Android NDK 是一套允许您使用原生代码语言(例如 C 和 C++)实现部分应用的工具集。在开发某些类型应用时,这有助于您重复使用以这些语言编写的代码库。
你可以去下载最新64位稳定版本:android-ndk-r14b-windows-x86_64.zip
当然由于历史原因我选择的是android-ndk-r12b-windows-x86_64.zip
下载后解压开即可。解压目录为<ndk-dir>。
6&7. Android SDK和Android Studio就不必说了,注意SDK的版本安装全一点,从API_LEVEL=19以上的都下了最好。其中SDK的目录为<sdk-dir>。
8.JAVA ANT 1.9.9
在编译OpenCV for JAVA起到关键作用。下载地址:http://apache.fayea.com//ant/binaries/apache-ant-1.9.9-bin.zip。 相应解压目录为<ant-dir>。
编译配置
- 去到 <opencv-source> 中,创建<opencv-source>/platforms/android_arm
- 双击打开”cmake-gui.exe”
- 在”where is th source code”填入<opencv-source>目录
- 在”where to build the binaries”填入<opencv-source>/platforms/android_arm
- 点击”Add Entry”,添加”ANDROID_NDK”,并设定为”PATH”类目,对应目录为<nkd-dir>,在我的电脑上就是”F:\Android\android-ndk-r10e”
- 点击”Add Entry”,添加”ANDROID_NDK_HOST_X64”,并设定为”BOOL”类目,点击勾选。这是因为我们的NDK是64位版本的,如果你的NDK是32位的,则不需要勾选
- 点击”Add Entry”,添加”CMAKE_TOOLCHAIN_FILE”,并设定为”FILEPATH”类目,设置路径为<opencv-source>/platforms/android/android.toolchain.cmake
- 点击”Add Entry”,添加”CMAKE_BUILD_WITH_INSTALL_RPATH”,并设定为”BOOL”类目,点击勾选
- 点击”Add Entry”,添加”ANDROID_SDK”,并设定为”path”类目,设置路径为<sdk-path>
- 点击”Add Entry”,添加”ANDROID_ABI”,并设定为”string”类目,设置值为
armeabi-v7a
。这里的选项也即你需要编译的库类型,如果你想要编译armeabi
或者X86
都在这个值上修改。我们可以先编译armeabi-v7a
- 点击”Add Entry”,添加”ANDROID_NATIVE_API_LEVEL”,并设定为”string”类目,设置值为
19
。这里的选项也即你需要编译的API-LEVEL,我定的是19,你也可以用20或者21 - 点击”Configure”,选择”MinGW Makefile”作为编译选项,并在接下来的选项中选择”Specify toolchain file for cross-compiling”,点击”Next”,对应的路径选择<opencv-source>/platforms/android/android.toolchain.cmake,点击”Finish”
等待configure完成,如下图所示:
我们接着添加opencv-contrib模块,搜索
extra
,在OPENCV_EXTRA_MODULES_PATH
添加路径<opencv-contrib>/modulesConfiguring done完成后我们还需要进行一些调整:
- WITH_CUDA=OFF
- WITH_MATLAB=OFF
- BUILD_DOCS=OFF
- BUILD_PERF_TESTS=OFF
- BUILD_TESTS=OFF
- WITH_TIFF=OFF
- BUILD_opencv_bioinspired=OFF
- BUILD_opencv_dnn=OFF(如果你用不到这个的话,建议你禁掉)
- BUILD_opencv_structured_light=OFF(我当时添加这个模块时出现了错误,建议你也禁掉)
- BUILD_opencv_ximgproc=OFF(我当时添加这个模块时出现了错误,建议你也禁掉)
- BUILD_opencv_world:BOOL=OFF (不用尝试编译opencv_world了,从我的经验来看是编译不出来)
- BUILD_opencv_contrib_world:BOOL=OFF (同上)
ANT_EXECUTABLE=<ant-dir>/bin/ant.bat
上诉设定调整好后,再次点击configure后再点击generate,显示:
Configuring done
Generating done
执行编译
在上述编译配置完成后,通过命令行工具进入<opencv-source>/platforms/android_arm目录,执行
1
|
mingw32-make -j4
|
即可开始编译
遇到的问题:
1、ndk和sdk需要选择win64版本
2、报选择API错误,实际是读取ndk中特定api-level中的include文件读取不到,从其他版本的ndk中拷贝即可
转载于:https://www.cnblogs.com/zl1991/p/9285266.html
Linux 混合编译opencv与opencv_contrib的android版本相关推荐
- Linux下编译Opencv和contrib
1. 安装准备 1.1 安装依赖项 sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev liba ...
- Linux下编译opencv
1.安装工具包 sudo apt-get install build-essential sudo apt-get install cmake sudo apt-get install ...
- opencv linux 编译好,linux下编译opencv
" 错误的提示信息太少呀?不能给你有效的解决方法?######我在运行程序的时候,就出现这些警告!然后可以正常预览视频了!有时候 出完这些警告直接死机了 有时候视频前几秒正常 一会就死了 蛋 ...
- android编译的tool版本有多少,macOS Mojave(10.14.2)系统上编译LunarG/VulkanTools工程的Android版本...
$ cd ~ $ git clone https://github.com/LunarG/VulkanTools.git $ cd VulkanTools $ cd build-android $ e ...
- Android N混合编译与对热补丁影响深度解析
大约在六月底,Tinker在微信全量上线了一个补丁版本,随即华为反馈在Android N上微信无法启动.冷汗冒一地,Android N又搞了什么东东?为什么与instant run保持一致的补丁方式也 ...
- Android N混合编译与对热补丁影响解析
首先非常抱歉Tinker没有按期内测,这主要因为开源的代码需要通过公司内部审核与评测,这项工作大约还需要一个月左右.当前Tinker已经在公司内部开源,我们会努力让它以更完善的姿态与大家见面. 大约在 ...
- win10下编译OpenCV的微信二维码库给Dotnet使用
文章目录 前言 一.编译OpenCV和opencv_contrib 二.制作Dotnet可以调用的dll 第一步:创建C++空项目并添加一个类 第二步:配置OpenCV环境 第三步:将C++代码编译成 ...
- Android版本与Linux内核版本的关系
Android版本与Linux内核版本的关系 一.Android版本与Linux内核的关系 英文名 中文名 Android版本 Linux内核版本 No 无 1.1 Cupcake 纸杯蛋糕 1.5 ...
- 在linux下编译android下的opencv,使用cmake的方法
#前一篇帖子实验了build_sdk.py来编译opencv,失败了. #本篇尝试使用cmake来编译 #感谢这篇帖子提供的指导:https://www.cnblogs.com/jojodru/p/1 ...
最新文章
- 使用openpyxl处理表格数据
- Ansible 基础-介绍
- boost::johnson_all_pairs_shortest_paths用法的测试程序
- Dockerfile优化建议
- php计划任务方法(后台运行无刷新)
- 分布式ID生成器方案
- 苹果id登录_LOL手游公测!苹果/安卓下载登录详细教程
- 分布式文件系统 -- OSS云存储
- python爬取电子病历_利用 BERT 模型解析电子病历
- 分期付款“名义利率”和“实际利率”的公式及其套路
- Google Test - Google Testing and Mocking Framework
- python全局变量(模块法和global)
- python最早诞生于什么国_类型学最早诞生于哪个学科?()
- Leetcode-1658. 将 x 减到 0 的最小操作数
- 2021年安徽省大数据与人工智能应用竞赛人工智能(网络赛)-本科组赛题
- ORA-01012: not logged on处理
- 自动驾驶面临的困难以及中国在自动驾驶的优势
- 快速傅里叶变换(FFT)(学习笔记)
- 外部 SRAM 实验
- 关于2000版ISO 9001标准的新思考之四(转载)
热门文章
- python创建虚拟串口
- 主函数 main WinMain _tmain _tWinMain 的区别
- 详细介绍 Qt Creator 快捷捷应用
- Vue 跳转相同路由携带不同参数,而页面不刷新
- 安卓App报错:android.os.FileUriExposedException
- 前端学习(3159):react-hello-react之一个简单的helloworld
- [vue] vue变量名如果以_、$开头的属性会发生什么问题?怎么访问到它们的值?
- 工作152:阅读之后台管理登录样式
- 工作68:json校验工具
- 前端学习(2386):远程仓库的issue