嵌入式设备中OpenCV的移植

文章目录

    • 1. 移植是什么意思?
    • 2. 移植的一般过程
    • 3. OpenCV的移植过程
      • 3. 1下载源码
      • 3.2 搭建编译环境
        • 3.2.1 安装所需工具
        • 3.2.2 生成makefile文件
      • 3.3 编译OpenCV源码
    • 4. Qt例程使用OpenCV
    • 5. 运行例程

1. 移植是什么意思?

一般所接触的OpenCV都是直接在PC电脑上跑,比如python版或C++版的。现在呢把它放到imx6ull这个平台上去跑,所以需要修改一下。

2. 移植的一般过程

据我先前所接触的知识,移植一般是一下几个步骤:

  1. 下载源码
  2. 在现有平台上用目标平台的编译器编译源码(交叉编译)
  3. 得到可执行文件或一些动态库或其它东西

3. OpenCV的移植过程

3. 1下载源码

正点原子提供的是opencv-3.4.1,然后解压(在我的Ubuntu虚拟机中的~/OpenCV下)。并在同目录下创建buildinstall文件夹。
在这里插入图片描述

3.2 搭建编译环境

3.2.1 安装所需工具

安装cmake和cmake-gui,sudo apt-get install cmake cmake-qt-gui cmake-curses-gui

3.2.2 生成makefile文件

进入到build文件夹下面去,执行cmake-gui命令,开始配置OpenCV环境。具体配置参考正点原子的文档,然后配置完后会生成makefile。

先不要急着输入 make。首先在源码目录 opencv-3.4.1/3rdparty/protobuf/src/google/protobuf/stubs/common.cc这个文件下添加#define HAVE_PTHREAD宏定义才可以编译的过。具体原因是 HAVE_PTHREAD 宏定义了 pthread 库。

嵌入式设备中OpenCV的移植_第1张图片

3.3 编译OpenCV源码

进入到build目录,输入make -j 16开始编译。如果出现错误,先删除build目录下的所有文件,然后重新搭建编译环境。编译成功后,输入make install将某些东西安装到install文件夹,最终如下:
嵌入式设备中OpenCV的移植_第2张图片

4. Qt例程使用OpenCV

正x原x提供的OpenCV Qt例程。将此文件夹(opencvdemo)放到install文件夹下去。至于为什么放到此文件夹下去是因为在工程QOpenCV.pro文件中定义了lib库的路径是在QOpenCV.pro../../lib下(修改成../lib/xxx)。当然你可以通过修改QOpenCV.pro文件中LIBS的值来指定库文件的位置。
嵌入式设备中OpenCV的移植_第3张图片

**需要注意的一点是:**上图文件中的库是动态库,也就是说把这些文件拷贝到开发板上去后也要满足这样的要求(即QOpenCV这个程序所需的动态库在此文件上一层的上一层的lib文件夹中,否则会报动态库找不到的错误)。
在这里插入图片描述

配置好QOpenCV.pro文件后执行

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

然后执行qmake生成makefile,最后再执行make编译。编译完成后在当前目录生了可执行文件QOpenCV,把它和resource文件夹拷贝到开发板中去。

5. 运行例程

因为在Ubuntu虚拟机上编译正点原子提供的OpenCV Qt例程时用了动态库,所以需要把OpenCV/install/lib下的动态库拷贝到开发板的/lib下去。然后再把例程编译生成后的QOpenCV和resource文件夹拷贝到开发板中去,执行/etc/init.d/psplash.sh关闭原来的桌面应用系统,最后执行./QOpenCV即可(关闭桌面程序后,可执行/opt/qt5.5.1/apps/QDesktop/QDesktop &来重新启动。

报错说明:如果出现动态库找不到,就说明路径不对。因为前面的QOpenCV.pro文件中定义的动态库在../lib中,所以要保证开发板中的lib也在QOpenCV的../lib处。所以我们就可以通过改变QOpenCVresource文件夹的位置来满足动态库在QOpenCV../lib下。
嵌入式设备中OpenCV的移植_第4张图片

正x原x提供的例程在E:\Embedded\Alpha Linux\阿尔法Linux开发板光盘资料(A盘)\opencvdemo

你可能感兴趣的:(#,嵌入式Linux驱动开发,Linux应用开发,linux,opencv)