IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> OpenCV交叉编译环境搭建 -> 正文阅读

[人工智能]OpenCV交叉编译环境搭建

前言

初学OpenCV,在Ubuntu上可以用apt-get方便的解决编译依赖,OpenCV的编译过程较为顺利。但想在嵌入式arm板子上进行测试,编译则不这么顺利,特别是在解决依赖的问题上比较繁琐,如ffmpeg,网上也有很多案例和解决方法可供参考。
我个人追求极简主义(其实是懒……),既然目的仅仅是编译OpenCV,就尽量不要花太多时间去编译其他依赖库,以免本末倒置。在这描述一种借助buildroot构建解决所有编译依赖的方法。

编译buildroot

我个人比较习惯用buildroot去构建文件系统,因为buildroot上的package更新比较及时,在上面我几乎能找到所有我需要的package。同样的,OpenCV在buildroot中也有支持。其实,如果您对OpenCV的版本不敏感的话,那么直接用buildroot就完事了,全剧终……
不过,如果buildroot里的OpenCV的版本不是您想要的,或者您需要编译opencv_contrib(截稿前本人发现buildroot貌似默认不支持编译contrib,可能是由于专利原因吧……),那么就可以先在buildroot里将opencv选上,先整体编译一遍buildroot,这样buildroot就可以自动帮您解决所有编译依赖。
buildroot的编译不是本文重点,无非就是通过menuconfig选好target options、toolchain等,同时把opencv选上,在此就不展开了。

编译OpenCV

完成buildroot编译后,就可以尽情享用它的成果了。编译OpenCV的流程在此也不展开,直接贴cmake配置:

cmake -D CMAKE_BUILD_TYPE=RELEASE
-D BUILD_SHARED_LIBS=ON
-D CMAKE_FIND_ROOT_PATH=<your path>/buildroot/output/host
-D CMAKE_C_COMPILER=<your path>/buildroot/output/host/bin/arm-linux-gcc
-D CMAKE_CXX_COMPILER=<your path>/buildroot/output/host/bin/arm-linux-g++
-D CMAKE_CXX_FLAGS="-mfloat-abi=hard -Wno-psabi"
-D CMAKE_C_FLAGS="-mfloat-abi=hard"
-D CMAKE_INSTALL_PREFIX=<your path>\install
-D BUILD_ZLIB=ON
-D BUILD_EXAMPLES=ON
-D BUILD_TESTS=ON
-D BUILD_PERF_TESTS=ON
-D BUILD_opencv_apps=ON
-D OPENCV_EXTRA_MODULES_PATH=<your path>/opencv_contrib/modules

buildroot/output/host

此路径就是buildroot帮我们解决所有依赖库所在的路径,用于指定CMAKE_FIND_ROOT_PATH、CMAKE_C_COMPILER、CMAKE_CXX_COMPILER

-Wno-psabi

在编译过程中如果出现大量如下warnings:

note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<std::pair<int, double>*, std::vector<std::pair<int, double> > >’ changed in GCC 7.1

并且您的gcc版本大于7.1的话,则可在CMAKE_CXX_FLAGS中指定:

-Wno-psabi

我个人追求极简主义(其实是洁癖……),容不得半点warning。
(参考:what-does-the-gcc-warning-project-parameter-passing-for-x-changed-in-gcc-7-1

BUILD_ZLIB

此选项最好也开启,因为如果关闭,则默认会在CMAKE_FIND_ROOT_PATH中搜索libz.so,但在buildroot的output/host路径下存在两个libz.so,一个是host的,一个是target的,在我的环境中,cmake配置过程会匹配上的host的libz.so,导致后续编译出错。因此开启此选项让OpenCV自己编zlib吧。

make && make install

cmake配置成功后,查看log,您会发现之前常见的 ffmpeg 等的依赖根本不需要花时间去解决:

– Video I/O:
– DC1394: NO
– FFMPEG: YES
– avcodec: YES (ver 58.91.100)
– avformat: YES (ver 58.45.100)
– avutil: YES (ver 56.51.100)
– swscale: YES (ver 5.7.100)
– avresample: YES (ver 4.0.0)
– GStreamer: NO
– libv4l/libv4l2: NO
– v4l/v4l2: linux/videodev2.h

感谢buildroot……

后记

本人菜鸟,此文仅针对初学者,大神请莫见笑……

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:07:06  更:2021-11-25 08:09:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 4:11:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码