20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)

文章目录

  • 1. 准备工作
    • 1.1 下载OpenCV+Contrib
    • 1.2下载CMake
    • 1.3 下载MinGW
    • 1.3 下载Android Studio,并配置SDK和NDK
  • 2. 编译OpenCV + Contrib源码
    • 2.1 CMake配置项目文件
    • 2.2 MinGW编译OpenCV
  • 3. 如果勾选OpenCV Examples和OpenCV Projects
    • 3.1 安装JAVA JDK,配置Gradle
    • 3.2 添加local.properties文件
    • 3.3 编译OpenCV
  • 4. 总结

这一篇笔记是编译.a静态库,如果是编译dll可以看上一篇笔记:https://blog.csdn.net/Vissence/article/details/127000366

1. 准备工作

需要准备的项:

  • 源码:OpenCV + Contrib
  • 编译工具:CMake + MinGW
  • 提供NDK和SDK:Android Studio
  • 可选项:Java JDK(如果只是生成静态库,不需要安装这个)

1.1 下载OpenCV+Contrib

下载地址:https://github.com/opencv

  • OpenCV下载
    下载最新的Release即可。
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第1张图片
    分别下载OpenCV和Contrib的Source code.zip,并解压文件
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第2张图片
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第3张图片

1.2下载CMake

下载地址:https://cmake.org/
这是一个图形化界面的CMake工具,开箱即用,极大的简化了OpenCV的编译。
20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第4张图片
一路Next,再从Start里打开CMake,显示如下。
20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第5张图片

1.3 下载MinGW

下载地址:https://sourceforge.net/projects/mingw-w64/files/
20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第6张图片
解压之后,配置下环境变量即可。
如果不知道怎么做,可以参考:https://blog.csdn.net/yvge669/article/details/124564622

1.3 下载Android Studio,并配置SDK和NDK

下载地址:https://developer.android.com/studio
下载完成之后,打开Android Studio,点击右上角按钮,选择SDK Manager中进行配置,不需要创建项目。
20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第7张图片
按照下面的步骤,下载SDK和NDK。

  • 0:默认的SDK路径,待会儿需要填写,不用修改
  • 1:显示Package Details,如果不知道用哪个版本的SDK和NDK,直接下载最新的即可
  • 2:勾上想要的SDK,NDK版本
  • 3:点击Apply
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第8张图片

2. 编译OpenCV + Contrib源码

2.1 CMake配置项目文件

  • 1:OpenCV源码目录

  • 2:生成的项目文件放在哪里
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第9张图片

  • 3:添加Android的配置参数
    需要注意的是,Android_ABI参数必须在一开始就填写。
    如果在点击Configure之后才添加,Android_ABI会默认为armabi-v7a平台,后面再修改为arm64-v8a也没用了。(亲身经历,大家可以自己试试)
    另外,如果路径是复制粘贴的,注意使用右反斜杠,左反斜杠会识别为转义字符

    #编译后的 opencv 应用在 android 系统cpu 所对应的架构
    #armeabiv-v7a:第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
    #arm64-v8a:第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
    #armeabi:第5代、第6代的ARM处理器,早期的手机用的比较多。
    #x86:平板、模拟器用得比较多。
    #x86_64:64位的平板
    # string类型
    ANDROID_ABI:arm64-v8a
    
    # path类型 
    #当前windows 安装android studio sdk 路径
    ANDROID_SDK:D:/Sdk
    
    # path类型 
    #当前windows 安装android studio ndk
    ANDROID_NDK:D:/Sdk/ndk/21.1.6352462
     
    # string类型
    #默认API为21
    ANDROID_NATIVE_API_LEVEL 21
     
    # string类型
    #根据需求写入c++_static或c++_shared(默认是gnustl_static)
    ANDROID_STL:c++_static
    
    参考:https://blog.csdn.net/Chhjnavy/article/details/125560125
    
  • 4:点击Configure,选择刚刚在Android Studio中下载的NDK中的build/cmake/android.toolchain.cmake
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第10张图片

  • 5:搜索extra,填写Contrib的路径
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第11张图片

  • 注意:如果前面下载了多个版本的SDK,记得修改一下编译的SDK版本,否则默认是最新的。
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第12张图片

  • 6:搜索build,取消勾选Examples和Projects
    因为我们只需要静态库文件,不需要build示例,所以可以取消。
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第13张图片
    取消之后Java Wrappers会变为NO
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第14张图片
    如果不取消,需要安装Java JDK,并配置对应的gradle版本;
    Java JDK:https://www.oracle.com/java/technologies/downloads/
    Java和gradle版本对应:https://docs.gradle.org/current/userguide/compatibility.html
    gradle和gradle plugin版本对应:https://developer.android.google.cn/studio/releases/gradle-plugin.html#updating-plugin
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第15张图片
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第16张图片

  • 7:点击Configure,取消不需要的库
    红色是指新更新的参数,白色是没有更新的参数,点两次Configure,就都会变白
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第17张图片

  • 8:Build_Type改为Release,除非需要Debug OpenCV源码。
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第18张图片

  • 9:点击Configure让所有内容都变白,就可以点击Generate生成项目文件了

2.2 MinGW编译OpenCV

进入项目生成的目录,打开PowerShell或者Git bash,运行mingw32-make.exe -j8开始编译

mingw32-make.exe -j8
# -j8的意思是,用多少个核心进行编译,如果不加默认是单线程,编译很慢,具体数字根据自己核心来

在这里插入图片描述
20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第19张图片
build完成之后,再执行mingw32-make.exe install生成库

mingw32-make.exe install

20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第20张图片
打开install/sdk/native文件夹,我们需要的文件都在这一个文件夹里
20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第21张图片

3. 如果勾选OpenCV Examples和OpenCV Projects

3.1 安装JAVA JDK,配置Gradle

  • 根据项目需要的版本安装Java JDK,并配置对应的gradle版本;
    Java JDK:https://www.oracle.com/java/technologies/downloads/
    Java和gradle版本对应:https://docs.gradle.org/current/userguide/compatibility.html
    gradle和gradle plugin版本对应:https://developer.android.google.cn/studio/releases/gradle-plugin.html#updating-plugin
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第22张图片
    安装完JAVA JDK,记得在环境变量中配置JAVA_HOME的位置
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第23张图片
  • 勾选EXAMPLES和PROJECTS,点击Configure之后,Java Wrappers为YES
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第24张图片

3.2 添加local.properties文件

在opencv_android文件夹下添加local.properties文件,文件内容为:sdk和ndk的路径,也就是前面Android Studio下载的sdk和ndk路径
20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第25张图片
20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第26张图片
参考:https://blog.csdn.net/Chhjnavy/article/details/125560125

3.3 编译OpenCV

和第二部分一样,用MinGW编译即可,这里记录几个编译的报错信息。

  • Could not determin java version from “17.0.4.1”
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第27张图片
    这个是因为JDK、Gradle、Gradle Plugin的版本不兼容的问题;
    请参考前面的版本对应表,重新下载JDK并配置Gradle Plugin和Gradle版本
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第28张图片
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第29张图片
  • Android build fails with JDK 15 and NDK 22: Source option 6 is no longer supported. Use 7 or later
    把opencv_android\opencv\build.gradle中的三行代码删掉即可。
    20220924 Windows平台用MinGW编译OpenCV+Contrib静态库(.a)_第30张图片
    具体原因,看了下Github和Android官网的解释,没看明白。但是删除之后确实编译成功了
    参考:https://github.com/opencv/opencv/issues/19567
    参考:https://developer.android.com/studio/write/java8-support

4. 总结

Android的坑也太多了吧,能编译成功完全靠运气。

你可能感兴趣的:(opencv,windows,android,opencv-contrib)