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

编译环境准备

  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 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。也就是安装选项中的:
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:\Android\android-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中拷贝即可

转载于:https://www.cnblogs.com/zl1991/p/9285266.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序 - 用户进入客服会话会在右下角显示可能要发送的小程序提示

起因&#xff0c;看到了抽奖小助手的操作&#xff0c;如下截图 我就想 我去 这个吊啊 很懵逼 因为之前没见过 以为是服务端的操作 看了半天服务端文档并没有相关介绍&#xff0c;在微信社区遨游了半天发现了 原来就是小程序「buttun」组件新增&#xff08;之前看的时候 明明没…

小程序真机测试「启动参数」解析出错问题

写小程序2年了 前两天才碰到的这个问题 以前没出错过 话不多说 直接上图 1、小程序 - 启动参数图例 2 2、微信开发者工具-模拟器输出参数-正常图例 这是没问题&#xff01; 3、真机测试-输出参数-错误图例 也不知道是什么原因 去看了一下文档 「启动参数」传参的规则并没有改…

DHCP服务器的设计

介绍 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;通常被应用在大型的局域网络环境中&#xff0c;主要作用是集中的管理、分配IP地址&#xff0c;使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息&…

java - springmvc整合cxf发布webservice

1.jar包已上传百度云盘&#xff0c;在jar包目录下 2.web.xml配置 <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:schemaLocation" http://java.sun.com/xml/ns/javaee http://jav…

Vue报错:Elements in iteration expect to have ‘v-bind:key‘ directives的解决办法

1.我们在使用v-for的时候&#xff0c;在v-for 后添加 v-bind:key"ite Vue 2.2.0的版本里&#xff0c;当在组件中使用v-for时&#xff0c;key是必须的。 1.我们在使用v-for的时候&#xff0c;在v-for 后添加 v-bind:key"item" <div v-for"todo in to…

vue报错:error Strings must use singlequote quotes 字符串必须使用单引号

例出现下面报错 这个问题说明必须使用单引号&#xff0c;在vue的项目开发中&#xff0c;如果我们在通过vue-cli脚手架构建项目的时候使用了Eslint严格模式&#xff0c;那么对于字符串类型的数据String必须要使用单引号&#xff0c;不能使用双引号&#xff0c;否则会报异常。所以…

工作327:uni-数据格式处理

allPrpos(obj) { // 用来保存所有的属性名称和值let list[]var props "";// 开始遍历for(var p in obj){ // 方法if(typeof(obj[p])"function"){ obj[p]();}else{ // p 为属性名称&#xff0c;obj[p]为对应属性的值if(p.indexOf("apic") ! -1){…

mysql数据库的设计

数据库的设计有一个严谨的流程&#xff0c;根据流程制作一个完整的数据库&#xff0c;可以省去很多的时间&#xff0c;也可以最大程度上与客户的想法契合。 需求分析阶段&#xff1a;分析客户的业务和数据处理需求 概要设计阶段&#xff1a;设计数据库的E-R模型图&#xff0c;确…

NTP服务器时间同步

一、简要说明 二、安装步骤 三、配置文件 四、常用命令 五、注意事项 六、运行截图 七、参考资料一、简要说明 搭建Kubernetes环境&#xff0c;需要几台、几十台机器配合运作&#xff0c;许多集群服务比如Etcd等都依赖系统的时间&#xff0c;如果机器的系统时间不一致…

[bug] uni-app 支付宝小程序 上传文件uni.uploadFile 报错 errMsg: “uploadFile:fail 无效参数“

首先看报错 就挺奇怪的 uni.chooseImage返回的参数都没问题&#xff0c; H5上也能正常运行 看下我的uni.uploadFile函数 uni.uploadFile({url: baseUrl params_.url,name: file,filePath: params_.query.files,formData: param_,success: (res) > {uni.hideLoading() …

【bug】HbuilderX运行到微信小程序 报错

首先&#xff0c;大前提是代码本身在HbuilderX里运行H5是没问题的&#xff0c;不报错 。然后运行到微信小程序报错了。&#xff08;注&#xff1a;以下所说小程序代指微信小程序&#xff09;。 我来这里分享一下我报了什么错&#xff0c;怎么解决的和我浅薄的理解。 报错位置…

php 获取某个月的周一

今天有个朋友问了一个问题&#xff0c;最后解决了下&#xff0c;先整理记下来&#xff0c;后面用到了再说 function getMonday($month ){if(empty($month)){$month date("Y-m");}$maxDay date(t, strtotime($month."-01"));$mondays array();for($i1;…

Mac安装brew及报错处理办法

brew又叫Homebrew&#xff0c;官网安装方式 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" MacOS系统使用Homebrew官方地址时&#xff0c;报错&#xff1a; curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYS…

微信小程序复制到剪切板及换行问题

wxml <textarea type"text" v-model"copyContent" placeholder"请输入内容" style""/> <button type"default" click"copy">复制内容</button> data中声明变量 data(){return{copyContent: …

Object Tracking using OpenCV (C++/Python)(使用OpenCV进行目标跟踪)

本博客翻译搬运自https://www.learnopencv.com/object-tracking-using-opencv-cpp-python&#xff0c;用于初入目标跟踪的新手学习&#xff0c;转贴请注明&#xff01; 使用OpenCV进行目标跟踪&#xff08;C/Python&#xff09; 在本教程里&#xff0c;我们将学习OpenCV3.0中引…

Sublime Text 3 、WebStorm配置实时刷新

本文所用软件版本Sublime Text 3(Build 3143)、WebStorm 2017.2.4(Build #WS-172.4155.35)、Google Chrome v61.0.3163.100&#xff0c;其他版本软件配置过程可能不一样&#xff0c;请知悉&#xff01; 一.Google Chrome安装LiveReload插件 1.下载插件 LiveReload 2.1.0 链…

#0 scrapy爬虫学习中遇到的坑记录

python 基础学习中对于scrapy的使用遇到了一些问题。 首先进行的是对Amazon.cn的检索结果页进行爬取&#xff0c;很顺利&#xff0c;无碍。 下一个目标是对baidu的搜索结果进行爬取 1&#xff0c;反爬虫 1.1 我先对ROBOTSTXT_OBEY进行设置&#xff0c;结果找到了scrapy的默认参…

Sublime Text 3 、WebStorm配置护眼主题(浅绿色)

本文所用软件版本Sublime Text 3(Build 3143)、WebStorm 2017.2.4(Build #WS-172.4155.35)&#xff0c;其他版本软件配置过程可能不一样&#xff0c;请知悉&#xff01; 1.Sublime Text 3护眼主题 &#xff08;1&#xff09;下载配置文件 链接&#xff1a;http://pan.baidu.…

angular - 如何运行在起来 - 使用nginx

nginx下载地址&#xff0c;使用的是标准版的&#xff1a; 点击下载nginx nginx下载完后&#xff0c;解压 dist文件夹下面所有angular文件放入html文件夹中. 最后命令行cd到当前nginx.exe目录&#xff0c;启动命令&#xff1a;nginx 再配置一下conf文件夹下面的nginx.conf 再loc…

深度学习之Batch Normalization

1、Batch Normalization的引入 在机器学习领域有个很重要的假设&#xff1a;IID独立同分布假设&#xff0c;也就是假设训练数据和测试数据是满足相同分布的&#xff0c;这是通过训练数据获得的模型能够在测试集上获得好的效果的一个基本保障。在深度学习网络中&#xff0c;后一…