目录
附录: Linux Scp 命令 将QOpenCV从Ubuntu拷贝到ARM开发板中运行
所使用的环境:
windows 10 74bits
Ubuntu16.04或18.04
OpenCV 3.4.1
一、下载安装通用交叉编译器
1.1 下载通用交叉编译器
要为 I.MX6U 移植 OpenCV,需要使用的 ARM 平台交叉编译器,这里下载 Linaro 出品的交叉编译器,也就是正点原子 I.MX6U 嵌入式 Linux 驱动开发指南第 4.3 小节里推荐的 4.9 版本的编译器,这里重复写下载的方法。如果已经知道怎么安装或者已经安装可跳过第一章。下面是下载地址。https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/。
1.2 安装通用交叉编译器
将上面 1.1 小节下载好的通用交叉编译器压缩包拷贝到 Ubuntu 虚拟机,解压进行安装。编者是 64 位的 Ubuntu。所以通用 FileZilla 或者 WinSCP 拷贝 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 到 Ubuntu 虚拟机。
在 Ubuntu 目录下创建/usr/local/arm 文件夹,为下面安装到/usr/local/arm 这个文件夹做准备。
sudo mkdir /usr/local/arm
解压交叉编译器压缩包至/usr/local/arm 目录下,稍等片刻,解压完成如下。
sudo tar xf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz -C /usr/local/arm/
使用 vi 指令编辑/etc/profile 这个文件。
sudo vi /etc/profile
打开/etc/profile 以后,在末尾添加如下所示内容。
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
添加完成如下图,保存退出,重启系统。
1.3 验证通用交叉编译器
要使用此编译器,还要在 Ubuntu 上安装一些库。
sudo apt-get install lsb-core lib32stdc++6
在 1.2 小节修改环境变量重启系统后,在终端输入 arm-linux-gnueabihf-gcc -v 来查看安装的交叉编译器版本号。看到如下结果,表明成功!
arm-linux-gnueabihf-gcc -v
二、搭建 OpenCV 3.4.1 的编译环境
2.1 下载 OpenCV 3.4.1 源码
OpenCV 官方源码下载链接为 https://opencv.org/releases/ 可以看到有很多版本的 OpenCV源码下载。本次选择的是 opencv-3.4.1 版本源码,其他版本请自行选择编译,但是不确保其他源码编译不出现错误。请自行点击下载,国外网站,下载常失败。
拷贝 opencv-3.4.1.tar.gz 到 Ubuntu 虚拟机,使用下面的指令直接解压。然后进入解压后的目录查看。
tar xf opencv-3.4.1.tar.gz
cd opencv-3.4.1/
ls
2.2 配置 OpenCV 环境
创建 build、install 文件夹。build 为构建文件夹,install 为安装文件夹。
mkdir build install
ls
安装 cmake 和 cmake-gui 工具
sudo apt-get install cmake cmake-qt-gui cmake-curses-gui
进入 build 目录下,执行指令 cmake-gui,开始配置 OpenCV 的环境。
cd build
cmake-gui
指定我们源码的所在路径和构目录。按如下图设置,记得修改成个人的路径。再点击 Generate。
选择 Unix Makefiles,然后选择 Specify options for cross-compiling,再点击 Next。
填写交叉编译器的路径,填写第一章安装的交叉编译器路径。
下面就是您配置的信息,可以配置很多项,比如要编译哪些库等都可以在此选择编译或者不编译。
点击 CMAKE,在 CMAKE_EXE_LINKER_FLAGS 处添加上“-lpthread -lrt -ldl”添加这些是指定依赖库的链接参数。
再在 CMAKE_INSTALL_PREFIX 处指定安装目录,我们在上面已经新建了 install 安装目录。如果不指定,它会默认安装到 Ubuntu 系统目录/usr/local 下。再点击关闭。到这里我们已经完成配置
至此我们配置完,现在我们需要生成 Makefile 等文件,我们先点击 Configure,再点击 Generate 就可以生成了。
我这里的界面如下图所示(个人路径不一样):
2.3 编译 OpenCV 源码
先不要急着输入 make。首先在源码目录 3rdparty/protobuf/src/google/protobuf/stubs/common.cc 这个文件下第 33 行添加#define HAVE_PTHREAD 宏定义才可以编译的过。具体原因是 HAVE_PTHREAD 宏定义了 pthread 库。在如下位置添加即可。
cd .. // 返回 opencv 源码顶层目录
vi 3rdparty/protobuf/src/google/protobuf/stubs/common.cc
修改完成后,返回于是 build 目录下,可以看到 bulid 目录下已经准备了构建文件。我们直接输入 make 构建即可。
cd build/
make -j 16
编译完成如下图。如果有出错,先删除 build 目录下的所有文件,按第 2.2 小节重新再来一次!cmake-gui 尽量一次配置成功。
输入 make install,把库安装在 2.2 小节我们创建的 install 目录下。然后使用 ls 指令查看安装目录 install。看到有如下图一样的文件,表明安装成功。
make install
ls ../install
至此我们已经编译完成 OpenCV 了,把 install 文件夹的 lib 下的所有库,拷贝到文件系统下的/usr/lib 目录下,写好程序调用即可!
三、QT例程使用 OpenCV
3.1 编译 QOpenCV 工程
正点原子提供 OpenCV Qt 例程,例程作者已经上传到百度云。请在复制链接到浏览器打开!
链接:https://pan.baidu.com/s/1z-CdhbcmgdpPZMzo9WpZUA 提取码:6rn0
下载完成后,把 QOpenCV 文件夹放到 install 文件夹下。
为什么要放到 install 文件夹下呢,这是因为我们在工程 QOpenCV.pro 文件里定义了 lib 库的路径是在 QOpenCV.pro 的../../lib 下。我们打开 QOpenCV.pro 工程来看。
进入 QOpenCV/opencvdemo 目录下。
我们修改好后,将开始编译这个 Qt 工程。
在 Ubuntu 终端执行下面的指令来使能 Qt 交叉编译的环境变量。
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
在 QOpenCV.pro 同目录下,执行 qmake 生成 Makefile,用于编译 Qt 工程。
再执行 make 编译 Qt 工程,编译完成如下图
编译完成后在当前目录生成可执行文件 QOpenCV,我们需要把它和 resources 文件夹拷贝到文件系统里。
补充说明:
如果我们不是把QOpenCV这个工程放置于lib同级目录下,QOpenCV.pro就会编译找不到路径。
而且库必须是位于../../lib 下,就算我们指定 lib 具体路径,如果不在../../lib 就会编译报如下警告!
这是因为../../lib/libopencv_core.so 和../../lib/libopencv_imgproc.so 这两个库它自带路径../../lib。
3.2 测试 QOpenCV 工程
请使用正点原子出厂的文件系统!自己编译的 busybox 或 buildroot 文件系统是不具备 Qt 库的,
Qt 应用程序是运行不了的。
首先在串口终端里执行
USER# /etc/init.d/psplash.sh //关闭原来的桌面应用程序
需要拷贝 install/lib 文件夹下的 opencv 相关库拷贝到开发板的/lib 目录下。(这里一定是 lib 目录下,其它目录不行,即使设置了环境变量。具体原因未知!)
把下面这些库拷贝到文件系统路径/lib 下。
如下图作者已经拷贝到开发板的/lib 目录下了
同时拷贝了编译出来 Qt opencv 应用程序及 resouces 资源文件到/home/root 目录下。如下图。
在串口终端里直接执行 QOpenCV Qt 应用程序
./QOpencv
lcd 显示屏上已经出现应用程序的示例。因为应用程序是设定 800*480 的分辨率的。
如下图,点击原图,应用程序则不对图像处理。
点击边缘检测,可以看到这辆汽车已经被线条勾勒了。图片处理速度非常快。效果还是不错的。
3.3 OpenCV演示效果图
原图:
边缘检测:
灰度化;
阈值化:
腐蚀:
模糊:
锐化:
附录: Linux Scp 命令 将QOpenCV从Ubuntu拷贝到ARM开发板中运行
软件工具:Xshell 6
连接协议:ssh
操作命令:scp
查看开发板的IP地址
配置SSH连接的IP及端口
用户名:root 密码:出厂系统默认为空
QOpenCV的QT应用程序和resources资源图片文件夹路径为:
/home/hanhui/tools/opencv-3.4.1/install/QOpenCV/opencvdemo
查看Ubuntu的IP地址
具体操作指令如下:
scp hanhui@192.168.254.107:/home/hanhui/tools/opencv-3.4.1/install/QOpenCV/opencvdemo/QOpenCV ./
scp hanhui@192.168.254.107:/home/hanhui/tools/opencv-3.4.1/install/QOpenCV/opencvdemo/resources -r ./
结果如下:
运行QOpenCV应用程序:
和之前演示效果一样