正点原子IMX6ULL移植OpenCV3.4.1

前言

本文将介绍OpenCV的移植方法,及结合Qt例程去进一步学习OpenCV。网上的移植方法也很多,但是有些过于老旧等。本文将与大家一起学习移植OpenCV。编译过程十分简单,写这个文档也是为了大家少走弯路。下面带大家一起移植OpenCV到正点原子I.mx6ULL开发板ALPHA上。

  • Ubuntu版本:Ubuntu14.04 64bits 、Ubuntu16.04 64bits。其它版本Ubuntu没测试过。
  • 交叉编译工具:arm-linux-gnueabihf-  64bit
  • 硬件平台正点原子IMX6ULL (ALPHA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1、安装交叉编译工具

注意,这里不能使用NXP yocto所使用的交叉编译器arm-poky-linux-gnueab,具体原因未知。本次使用的是《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.x》的第4.3小节第三方编译器arm-linux-gnueabihf。

由于作者的Ubuntu是64位的,所以选择的是64位的编译工具链。请参照《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.x》的第4.3小节配置好交叉编译工具链。

 

 

 

 

2、下载OpenCV源码

OpenCV官方源码下载链接为https://opencv.org/releases/ 可以看到有很多版本的OpenCV源码下载。本次选择的是opencv-3.4.1版本源码,其他版本请自行选择编译,不确保源码编译不会出错,出错请自行解决。

由于opencv-3.4.1源码压缩包在官网下载的慢,而且经常是下载失败。大家理解下,是国外网站。作者本人将源码下载下来上传到自己的百度云。请将下面地址复制到浏览器打开。

链接:https://pan.baidu.com/s/1eeUWWOMf6G6xOe8F4c9_kQ

提取码:kym5

如链接失效,请联系QQ 1252699831

 

3、搭建OpenCV的编译环境

从第2节下载好源码后。在Ubuntu新建一个opencv文件夹。拷贝源码到opencv这个目录。如下图

                                                                      图3. 1 把opencv源码拷贝到opencv目录下

使用tar 指令解压,得到一个opencv-3.4.1文件夹。

                                                 

                                                                                图3. 2 解压opencv源码

在opencv文件夹下创建build、install文件夹。

build文件夹:构建目录

install 文件夹:安装目录

                                              

                                                                      图3. 3 新建构建目录、安装目录

安装cmake和cmake-gui工具

Ubuntu# sudo apt-get install cmake cmake-qt-gui  cmake-curses-gui

正点原子IMX6ULL移植OpenCV3.4.1_第1张图片

                                                                           图3. 4 安装cmake等工具

进入build目录下,执行指令cmake-gui,开始配置OpenCV的环境。

Ubuntu# cmake-gui

                                                                    图3. 5运行cmake-gui图形化工具

执行完成后会出现图形化工具cmake-gui

正点原子IMX6ULL移植OpenCV3.4.1_第2张图片

                                                                       图3. 6 图形化工具cmake-gui

指定我们源码的所在路径和构目录。勾选Advanced,再点击Configure或者Generate

正点原子IMX6ULL移植OpenCV3.4.1_第3张图片

                                                                           图3. 7 指定源码目录及构建目录

选择Unix Makefiles,然后选择Specify options for cross-compiling,再点击Next

正点原子IMX6ULL移植OpenCV3.4.1_第4张图片

                                                   图3. 8选择Unix类型Makefiles及指定具体交叉编译器路径

填写交叉编译器的路径,注意红色部分请填写自己的交叉编译器路径

Operation System linux

Compilers C /home/alientek/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc

Compilers C++ /home/alientek/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++

Targer Root/home/alientek/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

指定交叉编译工具的具体路径,按个人路径指定,如下图。其他默认即可。

正点原子IMX6ULL移植OpenCV3.4.1_第5张图片

                                                                     图3. 9 指定交叉编译工具的具体路径

下面就是您配置的信息

正点原子IMX6ULL移植OpenCV3.4.1_第6张图片

                                                                                  图3. 10 配置信息

我们还需要配置一些信息,点击如下图CMAKE处。

正点原子IMX6ULL移植OpenCV3.4.1_第7张图片

                                                                            图3. 11点击CMAKE

CMAKE_EXE_LINKER_FLAGS处添加上-lpthread -lrt -ldl。添加这些是是指定依赖库的链接参数。

正点原子IMX6ULL移植OpenCV3.4.1_第8张图片

                                                                                 图3. 12 配置依赖库参数

再在CMAKE_INSTALL_PREFIX处指定安装目录,我们在上面已经新建了install安装目录。我们直接指定到该目录即可。如果不指定,它会默认安装到Ubuntu系统目录/usr/local下。这样会直接替换我们/usr/local下的库。

正点原子IMX6ULL移植OpenCV3.4.1_第9张图片

                                                                               图3. 13 指定安装路径

至此我们配置完,现在我们需要生成Makefile等文件,我们先点击Configure,再点击Generate就可以生成了。

正点原子IMX6ULL移植OpenCV3.4.1_第10张图片

                                                                      图3. 14 配置生成Makefile等文件

如下图,点击了Generate后看到信息像如下图一样,表明生成成功,若出现报错,请根据对话框里的内容指定的文件去自行去检查错误!一般都是交叉编译器路径不对造成的。配置完成生成文件后,我们点击左上角关闭这个图形化配置界面即可。

正点原子IMX6ULL移植OpenCV3.4.1_第11张图片

                                                                                 图3. 15 检查配置成功与否

 

 

 

4、编译OpenCV源码

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

正点原子IMX6ULL移植OpenCV3.4.1_第12张图片

                                                                           图4. 1修改common.cc文件

修改完成后,返回于是build目录下,可以看到bulid目录下已经准备了构建文件。我们直接输入make构建即可。

                                                                        图4. 2 build目录准备用于构建的文件

输入make开始编译

Ubuntu# make -j 16

正点原子IMX6ULL移植OpenCV3.4.1_第13张图片

                                                                                         图4. 3开始构建

编译完成如下图,如果有出错,先删除build目录下的所有文件,按第3节重新再来一次!

cmake-gui尽量一次配置成功!

正点原子IMX6ULL移植OpenCV3.4.1_第14张图片

                                                                                           图4. 4构建成功

输入make install安装到指定目录

Ubuntu# make install

正点原子IMX6ULL移植OpenCV3.4.1_第15张图片

                                                                                      图4. 5开始安装

安装成功如下图

正点原子IMX6ULL移植OpenCV3.4.1_第16张图片

                                                                                          图4. 6安装成功

进入install目录下有如下几个目录表明成功。到此完成编译!

                                                                          图4. 7检查install目录下的文件

5、Qt例程使用OpenCV

5.1编译QOpenCV工程

正点原子提供OpenCV Qt例程,例程作者已经上传到百度云。请在复制链接到浏览器打开!

链接:https://pan.baidu.com/s/1z-CdhbcmgdpPZMzo9WpZUA

提取码:6rn0,如链接失效请联系作者QQ 1252699831

下载完成后,把QOpenCV文件夹放到install文件夹下。

                                                                    图5.1. 1 将QopecCV放于install文件夹下

为什么要放到install文件夹下呢,这是因为我们在工程QOpenCV.pro文件里定义了lib库的路径是在QOpenCV.pro的../../lib下。我们打开QOpenCV.pro工程来看。

进入QOpenCV/opencvdemo目录下。

Ubuntu# vi QOpenCV.pro

注意INCLUDEPATH需要修改为自己OpenCV安装文件夹下的include路径!“#”号的是注释,不编译。

正点原子IMX6ULL移植OpenCV3.4.1_第17张图片

                                                                        图5.1. 2查看QOpenCV.pro文件

我们修改好后,将开始编译这个Qt工程。

请根据【正点原子】I.MX6U用户快速体验V1.x.pdf第四章来搭建Qt工程的交叉编译工具链。

搭建完成后。在Ubuntu终端执行下面的指令来使能Qt交叉编译的环境变量。

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

在QOpenCV.pro同目录下,执行qmake生成Makefile,用于编译Qt工程。

                                                                  图5.1. 3使用qmake生成Makefile

再执行make编译Qt工程

                                                                         图5.1. 4执行make

编译完成如下图

正点原子IMX6ULL移植OpenCV3.4.1_第18张图片

                                                                                   图5.1. 5编译完成

编译完成后在当前目录生成可执行文件QOpenCV,我们需要把它和resources文件夹拷贝到文件系统里。

                                          图5.1. 6拷贝QOpenCV和resources文件夹到开发板的/home/root目录下

补充说明:

如果我们不是把QOpenCV这个工程放置于lib同级目录下,QOpenCV.pro就会编译找不到路径。而且库必须是位于../../lib下,就算我们指定lib具体路径,如果不在../../lib就会编译报如下警告!这是因为../../lib/libopencv_core.so和../../lib/libopencv_imgproc.so这两个库它自带路径../../lib。

正点原子IMX6ULL移植OpenCV3.4.1_第19张图片

                                                                        图5.1. 7编译报警告的情况

为了避免这个警告,和编译出来的程序可能找不到路径,所以才在工程设置成下面这样的。

正点原子IMX6ULL移植OpenCV3.4.1_第20张图片

                                                                                     图5.1. 8解决方法

 

5.2测试QOpenCV工程

请使用正点原子出厂的文件系统!自己编译的busybox或buildroot文件系统是不具备Qt库的,Qt应用程序是运行不了的。

首先在串口终端里执行

USER#   /etc/init.d/psplash.sh  //关闭原来的桌面应用程序

我们需要拷贝第4节install/lib文件夹下的opencv相关库拷贝到开发板的/lib目录下。(这里一定是lib目录下,其它目录不行,即使设置了环境变量。具体原因未知!)

把下面这些库拷贝到文件系统路径/lib下。

                                                                              图5.2. 1OpenCV库

如下图作者已经拷贝到开发板的/lib目录下了

                                                                   图5.2. 2拷贝OpenCV库到开发板的/lib目录下

同时拷贝了5.1小节编译出来Qt opencv应用程序及resouces资源文件到/home/root目录下。如下图。

                                           图5.2. 3 拷贝QOpenCV应用程序及资源文件到开发板的/home/root目录下

在串口终端里直接执行QOpenCV Qt应用程序

USER#   ./QOpencv

                                                                         图5.2. 4执行QOpenCV应用程序

lcd显示屏上已经出现应用程序的示例。因为应用程序是设定800*480的分辨率的,不做兼容。如果不符合您的屏的尺寸大小,请自行修改。

如下图,点击原图,应用程序则不对图像处理。

正点原子IMX6ULL移植OpenCV3.4.1_第21张图片

                                                              图5.2. 5QOpenCV示例上显示的原图

点击边缘检测,可以看到这辆汽车已经被线条勾勒了。此外还有灰度化、阈值化、腐蚀、模糊、锐化等。这里就不贴图了,图片处理速度非常快。效果还是不错的。

正点原子IMX6ULL移植OpenCV3.4.1_第22张图片

                                                            图5.2. 6点击边缘检测,图像处理的效果如上图

至此移植及应用示例已经全部结束。若文档中有错漏或者需要补充的请到正点原子imx6版块发贴讨论。

写帖不易,感谢大家支持,和大家一起努力!

 

你可能感兴趣的:(OpenCV移植)