MCU部署OpenCV的“配置篇

控制/MCU

1866人已加入

描述

书接上文,本期小编将带着大家一起来搭建开发环境,并最终将编译出来的代码部署到目标平台。

相信大家已经迫不及待,话不多说,直接开整。

说在前头,有几个小工具需要提前安装下:

为了保证最终镜像的调试与验证, 安装MCUXPresso作为调试IDE,然后还需要一个串口终端来查看打印(例如TeraTerm,Putty等)

安装Git软件,负责获取OpenCV源码以及后续代码的维护

当然,如果想在Linux下开发的话,可能还需要一丢丢的Linux操作基础。
不过,小编这里就以Windows为例进行说明了,Linux环境下的操作可以说:如有雷同,那必然不是巧合。

环境搭建

1. 下载OpenCV源码:https://github.com/opencv/opencv.git 找一个喜欢的位置,执行以下指令,获取源码:

git clone --depth=1 https://github.com/opencv/opencv.git

2. 下载安装Windows特供版CMake:https://cmake.org/files/v3.10/cmake-3.10.2-win64-x64.zip 再找一个我们喜欢的位置,解压之:

your_path/cmake-3.10.2-win64-x64

3. 之前说到,因为我们这里不借助IDE来进行代码的编译工作,就需要依靠Make工具来完成这一任务。下载MinGW,https://sourceforge.net/projects/mingw/files/latest/download 这里已包含了Make工具。下载完成后就是一键下一步,直到安装成功:

your_path/MinGW

4. 选择交叉工具链,有两个选择:Keil提供的ARMCLang,或是MCUXpresso中提供的gcc工具链arm-none-eabi-gcc。考虑到Keil作为收费软件,这里直接选择后者。

不过,这里只是编译代码的工具不同而已,不会影响后续OpenCV代码的配置。

5. 从小编自己的代码仓库https://gitee.com/crist_xu/opencv_mcu 找到下面两个文件夹,放到上面下载的OpenCV代码路径中:

fake_root中是一些头文件和工具链配置文件。

opencv32_stdint用来重新定义int类型,这个是必要的。

OpenCV模块配置

1. 在源码路径下,新建文件夹用来存放编译后的代码,起名build。之后在此文件夹中执行:

your_path/cmake-3.10.2-win64-x64incmake-gui.exe ...

打开CMake,长这个样子:

OpenCV

2. 点击Configure,进行工程配置

OpenCV

这里能够指定工程管理工具,如果想使用MCXPresso IDE的话,可以选择Eclipse CDT4 – MinGW Makefiles 这样一来会生成一个eclipse 工程,就可以使用IDE操作了。

不过,小编要反其道而行,选择MinGW Makefiles,这样我们可以直接使用命令行的形式进行代码编译。

之后点击Specify toolchain file for cross-compiling并点击Next:

OpenCV

下一步是修改工具链文件,指定编译器路径等。

在上文提到的fake_root文件夹中找到armgcc.cmake / gcc.cmake,如果想要使用ARMCLANG,编辑armgcc.cmake:

OpenCV

这里的HELPER_FILE_PATH就是fake_root文件夹的位置;而TOOLCHAIN_DIR是Keil的安装位置,主要是为了让CMake能够找到对应的工具链。

如果是想要使用gcc的话,就打开编辑gcc.cmake:

OpenCV

这里的HELPER_FILE_PATH依旧是fake_root文件夹的位置,而TOOLCHAIN_DIR这里就是MCUXpresso的对应位置。

修改好之后,直接选择GCC作为工具链并点击继续:

OpenCV

点击Finish:

OpenCV

等待配置运行结束,所有属性将以红色字体高亮显示:

OpenCV

3. 模块配置,最好是先点击Grouped以及Advanced,这样一来模块被归类,就可以很容易找到那些关键分子。

这里我们回忆一下上一篇文章提到的,因为OpenCV包罗万象,拥有众多模块。而不是所有的模块都适合运行在MCU平台上,例如那些需要依赖于OS支持即多进程的模块,因此需要进行小心的适配:大家一定要严格按下表进行配置勾选:

groups options
Ungrouped Entries Unchecked all
BLAS Skipped
BUILD Checked: BUILD_JPEG, BUILD_OPENJPEG, BUILD_PNG,
BUILD_opencv_core, BUILD_opencv_features2d, BUILD_opencv_highgui,
BUILD_opencv_imgcodecs, BUILD_opencv_imgproc, BUILD_opencv_video
BUILD_opencv_world
CLAMDBLAS Skipped
CLAMDFT Skipped
CMAKE Skipped, but can change the CMAKE_BUILD_TYPE(Debug / Release) if you want
CPACK Unchecked all
CPU Skipped
CV Unchecked all
DC1391 Skipped
ENABLE Unchecked all except the ENABLE_FAST_MATH
HIGHGUI Unchecked
HOST Skipped
INSTALL Skipped
OPENCV Checked: OPENCV_DISABLE_FILESYSTEM_SUPPORT, OPENCV_DISABLE_THREAD_SUPPORT, OPENCV_ENABLE_MEMALIGN
OPJ Unchecked all
OpenBLAS Skipped
PNG Skipped
PYTHON2 / PYTHON3 Skipped
VIDEOIO Unchecked all
WITH Checked: WITH_OPENJPEG, WITH_PNG
ZLIB Skipped

之后再次点击Configure并点击Generate:

OpenCV

4. 代码编译:在build文件夹中,打开PowerShell命令行,运行Make:

your_path/MinGW/bin/mingw32-make.exe -j7

 

 

OpenCV

5. 经过漫长的等待,会获得5个静态库,libopencv_world.a,这是build/lib下所有图像处理函数的大集合;其他四个是针对图像编解码的函数:

OpenCV

OpenCV

至此,我们就基本完成了OpenCV源码的配置与编译,并最终获得了5个可爱的静态库,下一步就是如何将其部署到我们的MCU平台上。

编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分