控制/MCU
书接上文,本期小编将带着大家一起来搭建开发环境,并最终将编译出来的代码部署到目标平台。
相信大家已经迫不及待,话不多说,直接开整。
说在前头,有几个小工具需要提前安装下:
为了保证最终镜像的调试与验证, 安装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,长这个样子:
2. 点击Configure,进行工程配置
这里能够指定工程管理工具,如果想使用MCXPresso IDE的话,可以选择Eclipse CDT4 – MinGW Makefiles 这样一来会生成一个eclipse 工程,就可以使用IDE操作了。
不过,小编要反其道而行,选择MinGW Makefiles,这样我们可以直接使用命令行的形式进行代码编译。
之后点击Specify toolchain file for cross-compiling并点击Next:
下一步是修改工具链文件,指定编译器路径等。
在上文提到的fake_root文件夹中找到armgcc.cmake / gcc.cmake,如果想要使用ARMCLANG,编辑armgcc.cmake:
这里的HELPER_FILE_PATH就是fake_root文件夹的位置;而TOOLCHAIN_DIR是Keil的安装位置,主要是为了让CMake能够找到对应的工具链。
如果是想要使用gcc的话,就打开编辑gcc.cmake:
这里的HELPER_FILE_PATH依旧是fake_root文件夹的位置,而TOOLCHAIN_DIR这里就是MCUXpresso的对应位置。
修改好之后,直接选择GCC作为工具链并点击继续:
点击Finish:
等待配置运行结束,所有属性将以红色字体高亮显示:
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:
4. 代码编译:在build文件夹中,打开PowerShell命令行,运行Make:
your_path/MinGW/bin/mingw32-make.exe -j7
5. 经过漫长的等待,会获得5个静态库,libopencv_world.a,这是build/lib下所有图像处理函数的大集合;其他四个是针对图像编解码的函数:
至此,我们就基本完成了OpenCV源码的配置与编译,并最终获得了5个可爱的静态库,下一步就是如何将其部署到我们的MCU平台上。
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !