热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android重新编译OpenCV+contrib4.3.0模块

最近在写游戏脚本时发现,很多找图找色方法不支持全分辨,于是想做一套基于opencv的全分辨率图色插件,可以支持多平台、多语言。首先要解决问

最近在写游戏脚本时发现,很多找图找色方法不支持全分辨,于是想做一套基于opencv的全分辨率图色插件,可以支持多平台、多语言。首先要解决问题的是重新编译opencv+contrib。

折腾了半个月,终于在windows下成功为Android编译了Opencv + contrib模块。之前在网上查了很多材料,不是环境的问题就是配置的问题,总之都失败了。好在“久病成医”,经过千锤百炼摸索出了一套简单有效的编译方法。下面分享给大家:

环境准备


  • Windows操作系统
  • Android Studio 4.0
  • cmake 3.18
  • Mingw 0.6.2-beta​​​​​​

二、安装

1、首先,下载OpenCV 4.3.0 源码,根据需求再加上OpenCV_contrib 4.3.0 源码,解压放到你记得住的文件夹。

2、下载 cmake 3.18 安装包

3、下载 Mingw,选择下列需要安装的组件,右键选择 Mark for Installation,之后选择 Menu -> Installation -> Apply Changes

不同版本的Mingw组件格式会不同,但差别不大,参照上图配置即可。 

安装完后把mingw加入系统环境变量(win键搜索环境变量就有,编辑完后重启系统生效)

4、下载 Android NDK 和 SDK,可以直接在官网下,但这里推荐直接在 Android Studio 里安排。打开AS任意一个项目,在工具栏选择Tools -> SDK Maneger。然后,勾选右下角 Show Package Details,勾选一个NDK版本,Apply。

SDK同理,安装完后打开 Project Structure -> SKD Location 找到SDK路径

 

同样要写到环境变量里,变量名ANDROID_SDK变值  C:\Users\huishi\AppData\Local\Android\Sdk

 5、安装 JDK,最低需要 8, 过高版本可能不兼容

同样需要配置环境变量

​ 

三、编译配置 

 1、新建一个存放编译结果的文件夹,比如我就放在 G:\opencv\android_build,解压后源码放在 G:\opencv\source

运行 cmake-gui ,将源码和输出地址填入这里

2、 

点击 Add Entry,添加以下几个属性


  • ANDROID_NDK 类型为PATH,填入你的NDK路径(AS下载的就在Sdk\ndk\21.2.6472646
  • ANDROID_SDK PATH,填入你的SDK路径
  • ANDROID_ABI STRING,设置平台,不填默认为 armeabi-v7a
  • ANDROID_NATIVE_API_LEVEL STRING,默认API为21
  • ANT_EXECUTABLE PATH,填入ANT路径下的bin(用于java 封装,便于 AS 导入module)
  • ANDROID_STL STRING,根据需求写入c++_staticc++_shared(默认是gnustl_static)

这时候你可以看到一片红,不用慌,这是代表新增,不是报错。我们点击下方的Configure。

选择这个选项,Next,用你自己的ndk目录下的toolchain

​ 

 等待Configure完成,一切正常的话应该是这样

现在可以添加opencv-contrib模块,搜索 extra,在 OPENCV_EXTRA_MODULES_PATH 添加路径 ....../opencv_contrib-4.3.0/modules。(需要重新添加NDK路径)

出现如下错误的话,找到下面文件拷贝到opencv-contrib/modules/xfeatures2d/src目录下

 

3、参数调整

以下参数根据自己需求调整


  • BUILD_ANDROID_PROJECTS 不需要示例项目可直接取消勾选

  • BUILD_ANDROID_EXAMPLES = OFF

  • BUILD_PERF_TESTS = OFF

  • BUILD_TESTS = OFF

  • BUILD_opencv_world = OFF (生成 .so 库 libopencv_world.so,这是一个集合,不清楚和默认编译的 libopencv_java3.so 有什么区别,默认不开启,如果开启的话不会复制 java 层函数,也就是 cmake 的 gui 界面会显示 Java wrappers: NO)

  • BUILD_SHARED_LIBS = OFF (如果 On 则只编译 so 库)

  • WITH_CUDA = OFF (CUDA 是 NVidia 推出的并行计算架构,编译非安卓 SDK 时建议添加)

  • WITH_OPENCL = ON (因为我们编译的是 android sdk,所以建议添加移动端的并行架构支持)

  • WITH_OPENCL_SVM = ON (建议开启共享虚拟内存)

调整完后再次点击Configure,完成后点击Generate。

四、开始编译

在 buid 文件夹右键选择 Gitbash

输入命令 mingw32-make.exe

如果没有出现报错,则再输入 mingw32-make.exe install

编译完成,打开AS的项目,在工具栏选择File -> New -> Import_Module

如何在Android Studio中使用链接so库或.a,后面会分享给大家。着急学习的小伙伴可以加入QQ群与群主交流。群号:741676897(全分辨率图色游戏脚本插件教学)


推荐阅读
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
author-avatar
大胡子姐姐爱油面巾塞肉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有