Linux 混合编译opencv与opencv_contrib的android版本

摘要:
将配置编译到并创建/platforms/android_Arm双击打开“cmake-gui.exe”并在“where isthsourcecode”中填写目录,在“where to build the binary”中填写/pplatforms/android _Arm单击“Add Entry”添加“android_NDK”并将其设置为“PATH”类别。相应的目录是。在我的电脑上,它是“F:Android Android ndk r10e”。单击“添加条目”添加“ANDROID_ NDK_ HOST_ X64”并将其设置为“BOOL”类别,单击并选中。

 一、该方法只能编译.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

编译环境准备

  1. OpenCV 3.1.0源码(假定目录为<opencv-souce>)
  2. OpenCV_contrib 3.1.0源码(假定目录为<opencv-contrib>)
  3. cmake-gui 3.8.2 cmake的GUI工具
  4. Mingw 编译工具(假定目录为<mingw-dir>)
  5. Android NDK r12b 或者最新(假定目录为<ndk-dir>)
  6. Android SDK >=19(假定目录为<sdk-dir>)
  7. Android Studio
  8. Java ANT 1.9.9(假定目录为<ant-dir>)

以上你是需要准备编译的基础环境,下面分别讲解一下:
1.OpenCV源码

1
2
3
cd <opencv-source>;
git checkout -b "3.1.0" "3.1.0"

2.OpenCV_contrib源码

1
2
3
cd <opencv-contrib>;
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。也就是安装选项中的:
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>。

编译配置

  1. 去到 <opencv-source> 中,创建<opencv-source>/platforms/android_arm
  2. 双击打开”cmake-gui.exe”
  3. 在”where is th source code”填入<opencv-source>目录
  4. 在”where to build the binaries”填入<opencv-source>/platforms/android_arm
  5. 点击”Add Entry”,添加”ANDROID_NDK”,并设定为”PATH”类目,对应目录为<nkd-dir>,在我的电脑上就是”F:Androidandroid-ndk-r10e”
    1. android-ndk-setting
    2. 点击”Add Entry”,添加”ANDROID_NDK_HOST_X64”,并设定为”BOOL”类目,点击勾选。这是因为我们的NDK是64位版本的,如果你的NDK是32位的,则不需要勾选
      android-ndk-setting-2
    3. 点击”Add Entry”,添加”CMAKE_TOOLCHAIN_FILE”,并设定为”FILEPATH”类目,设置路径为<opencv-source>/platforms/android/android.toolchain.cmake
      android-ndk-setting-3
    4. 点击”Add Entry”,添加”CMAKE_BUILD_WITH_INSTALL_RPATH”,并设定为”BOOL”类目,点击勾选
    5. 点击”Add Entry”,添加”ANDROID_SDK”,并设定为”path”类目,设置路径为<sdk-path>
    6. 点击”Add Entry”,添加”ANDROID_ABI”,并设定为”string”类目,设置值为armeabi-v7a。这里的选项也即你需要编译的库类型,如果你想要编译armeabi或者X86都在这个值上修改。我们可以先编译armeabi-v7a
      android-ndk-setting-4
    7. 点击”Add Entry”,添加”ANDROID_NATIVE_API_LEVEL”,并设定为”string”类目,设置值为19。这里的选项也即你需要编译的API-LEVEL,我定的是19,你也可以用20或者21
    8. 点击”Configure”,选择”MinGW Makefile”作为编译选项,并在接下来的选项中选择”Specify toolchain file for cross-compiling”,点击”Next”,对应的路径选择<opencv-source>/platforms/android/android.toolchain.cmake,点击”Finish”

    MinGW交叉编译配置
    MinGW交叉编译配置

    等待configure完成,如下图所示:
    cmake-configure-1

    我们接着添加opencv-contrib模块,搜索extra,在OPENCV_EXTRA_MODULES_PATH添加路径<opencv-contrib>/modules

    Configuring done完成后我们还需要进行一些调整:

    1. WITH_CUDA=OFF
    2. WITH_MATLAB=OFF
    3. BUILD_DOCS=OFF
    4. BUILD_PERF_TESTS=OFF
    5. BUILD_TESTS=OFF
    6. WITH_TIFF=OFF
    7. BUILD_opencv_bioinspired=OFF
    8. BUILD_opencv_dnn=OFF(如果你用不到这个的话,建议你禁掉)
    9. BUILD_opencv_structured_light=OFF(我当时添加这个模块时出现了错误,建议你也禁掉)
    10. BUILD_opencv_ximgproc=OFF(我当时添加这个模块时出现了错误,建议你也禁掉)
    11. BUILD_opencv_world:BOOL=OFF (不用尝试编译opencv_world了,从我的经验来看是编译不出来)
    12. 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

即可开始编译
building

遇到的问题:

1、ndk和sdk需要选择win64版本

2、报选择API错误,实际是读取ndk中特定api-level中的include文件读取不到,从其他版本的ndk中拷贝即可

免责声明:文章转载自《Linux 混合编译opencv与opencv_contrib的android版本》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇sprignboot 中thymeleaf和freemarker 都存在时,默认选择哪个移动端适配插件(flexible.js)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

内核移植和文件系统制作(2):linux内核最小系统和initramfs文件系统

linux内核最小系统,使用内核版本:https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.8.1.tar.bz2 1,FL2440板子的基本硬件:晶振12MHZ CPU 型号为S3C2440,基于ARM920T,指令集ARMV4,时钟主频400MHz SDRAM H57V2562GTR-75...

Linux内核笔记:epoll实现原理(一)

一、说明 针对的内核版本为4.4.10。 本文只是我自己看源码的简单笔记,如果想了解epoll的实现,强烈推荐下面的文章: The Implementation of epoll(1) The Implementation of epoll(2) The Implementation of epoll(3) The Implementation of ep...

Xamarin.Forms之页面及导航

参考链接: Xamarin. Forms 页面 Xamarin.Forms 导航 Xamarin.Forms 第04局:页面 Xamarin.Forms页面代表跨平台的移动应用程序屏幕。 下文描述的所有页面类型均来自Xamarin.Forms Page类。 这些视觉元素占据了整个或大部分屏幕。 Page对象代表iOS中的ViewController和Uni...

pycharm上传文件目录到Linux

前言:相信不少学Python或者正在编写项目的Python爱好者都在用pycharm,有时候要上传文件目录到Linux服务器,比较麻烦,但是Pycharm已经有这个功能了,详细实现如下 1、打开Pycharm编辑器,选择选项Tools-Deployment-Configuration 2、填写命名,这个可以随便起,选择Type为SFTP 3、填写服务...

Windows 11和 Linux 漏洞赋予攻击者最高系统权限

微软的 Windows 10 和即将推出的 Windows 11 版本被发现存在一个新的本地提权漏洞,该漏洞允许具有低级别权限的用户访问 Windows 系统文件,进而使他们能够揭开操作系统安装密码的掩码,甚至解密私钥. CERT 协调中心 (CERT/CC) 在周一发布的漏洞说明中表示:“从 Windows 10 build 1809 开始,非管理用户...

菜鸟水平如何在Android Studio中添加uiautomator测试框架

1、启动AS,弹出创建Android Studio项目 2、选择 "Start a new Android Studio project",输入 application name 、company domain、project location,之后点击 Next进行下一步 3、根据所开发的产品进行选择,比如我是进行Android自动化,所以就选择Ph...