本帖最后由 翠花儿 于 2021-6-5 11:15 编辑
OpenCV 是目前开源项目中最著名的基于机器视觉方向的图像处理的开发包,目前已经有被移植到嵌入式 Linux 环境上。本文介绍了 OpenCV 交叉编译的基本步骤,及结合 Qt 例程去进一步学习 OpenCV 识别图像。 相关的配套资料在网盘资料“iTOP-i.MX6开发板资料汇总(不含光盘资料)\08_iTOP-i.MX6开发板Linux系统开发资料\22-QT系统移植OpenCv2.4.9”目录。 我们需要准备的资料: 1. 开发板使用的是 i.MX6Q开发板,开发板里面是QT5.7文件系统,其他的文件系统移植方法也通用。 2. 使用 Ubuntu14.04 3. 提供 opencv 源码“opencv-2.4.9.zip” 4. QT 测试例程 1 安装交叉编译工具交叉编译器为:arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2。设置交叉编译器请参考i.MX6Q-开发板使用手册21.1章节搭建交叉编译环境。 2 搭建opencv编译环境1.我们将文件中提供的“opencv-2.4.9.zip”也就是opencv源码通过ssh软件移ubuntu下并解压,作者将该文件放入了“/home/topeet/iMX6Q/opencv2.4.9/”目录下,新建opencvbuild和opencvinstall文件夹,opencvbuild是构建目录,opencvinstall是安装目录如下图所示。 2.OpenCV 2.2以后版本需要使用Cmake生成makefile文件,因此需要先安装cmake。 ubuntu下安装cmake比较简单,使用命令“apt-get install cmake”,如下图所示。 3.使用命令“cmake --version”查看版本,测试是否安装成功。如下图所示。 4. 我们使用命令“cd opencv-2.4.9/”进入源码目录。如下图 5.使用命令“cmake-gui”打开cmake的gui界面,开始进行配置。如下图示所示。 6.我们在“where is the source code”中填入电脑中opencv源码的位置,“where to build the binaries”填入生成make编译文件的位置,然后点击configure按钮。如下图所示。 7.选择最后一项,然后点击next,如下图所示。 8.Operating System 选择目标系统“Linux”, Compilers中选择交叉编译器的gcc和g++,“/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc”“/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-g++”,Target Root选择交叉编译器的路径“/usr/local/arm/arm-2014.05/arm-none-linux-gnueabi/bin”,include Mode选择“search only in target root”,其他如图所示,点击finish.如果出现配置错误的信息,关闭警告配置即可。 9. 此时主界面如下图所示,这时Cmake会读取程序的一些配置信息,可以在下图红框中对每一个编译选项进行修改,将CMAKE_INSTALL_PREFIX改成你想要的路径,作者改成了“/home/topeet/iMX6Q/opencv2.4.9/opencvinstall”,如下图所示。 10 在search中搜索WITH_CUDA,取消勾选,最后点Generate,在编译路径/home/topeet/opencv2.4.9/opencvbuild下就生成Makefile。 11 在search中搜索CMAKE_EXE_LINKER_FLAGS,Value值修改为 -lpthread -lrt -ldl,如下图所示: 12 修改完,点击Generate,左上角点击X关闭即可,如下图所示: 13 在 /home/topeet/opencv2.4.9/opencvbuild目录下输入命令make编译。编译部分截图如下所示。 编译完成之后。如下图所示: 14 使用指令“make install”,部分截图如下所示。 安装完成后,我们可以在“/home/topeet/iMX6Q/opencv2.4.9/opencvinstall”目录下看到编译生成的库文件。至此,移植工作基本完成。 3 QT程序编译1.将提供的 QT 文件下载完成后,放到 /home/topeet/iMX6Q/opencv2.4.9/opencvinstall/文件夹下。进入/QT/demo 目录下。我们打开 opencv_pic.pro 工程来看。 Ubuntu# vi opencv_pic.pro 注意 INCLUDEPATH 需要修改为自己 OpenCV 安装文件夹下的 include 路径!lib的目录必须是/QT/demo目录的上两级目录。 INCLUDEPATH += /home/topeet/iMX6Q/opencv2.4.9/opencvinstall/include \ / \ /home/topeet/iMX6Q/opencv2.4.9/opencvinstall/include/opencv2 \ /home/topeet/iMX6Q/opencv2.4.9/opencvinstall/include/opencv \ /usr/local/include LIBS += ../../lib/libopencv* \ ../../lib/libopencv_highgui.so \ ../../lib/libopencv_core.so \ ../../lib/libopencv_objdetect.so \ ../../lib/libopencv_imgproc.so \ ../../lib/libopencv_imgcodecs.so \ ../../lib/libopencv_calib3d.so \ ../../lib/libopencv_photo.so \ ../../lib/libopencv_contrib.so \ ../../lib/libopencv_stitching.so \ ../../lib/libopencv_legacy.so \ ../../lib/libopencv_superres.so \ ../../lib/libopencv_features2d.so \ ../../lib/libopencv_ml.so \ ../../lib/libopencv_ts.a \ ../../lib/libopencv_flann.so \ ../../lib/libopencv_nonfree.so \ ../../lib/libopencv_video.so \ ../../lib/libopencv_gpu.so \ ../../lib/libopencv_objdetect.so \ ../../lib/libopencv_videostab.so \ ../../lib/libopencv_highgui.so \ ../../lib/libopencv_ocl.so \ 因为编译opencv的编译器和编译qt的编译器版本的差异,我们需要在widget.cpp文件添加下面的宏定义 # define _GLIBCXX_USE_CXX11_ABI 0 2.搭建完成后。在 Ubuntu 终端执行下面的指令来使能 Qt 交叉编译的环境变量。 Ubuntu# source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon- poky-linux-gnueabi 然后输入qmake,make,如下图所示: make编译完成如下图: 3.编译完成后在当前目录生成可执行文件 opencv_pic,如下图所示。 4.我们需要把opencv_pic和 1.bmp 图片拷贝到开发板的/home/topeet/目录下。
然后把home/topeet/iMX6Q/opencv2.4.9/opencvinstall/lib目录下也就是opencv的安装目录下的库放入开发板lib目录下。 5.进入home/topeet目录下,赋予文件权限,然后执行./opencv_pic,发现有以下错误 6.出现上步骤的问题是因为找不到库,我们需要建立软链接后,再次查看,发现软链接已经建立好了 ls /lib/ -all|grep ld ln -s /lib/ld-2.8.so /lib/ld-linux-armhf.so.3 7 再次输入./opencv_pic命令运行,如下图所示,出现下面的问题。 我们将资料包里面如下图所示的俩个库文件拷贝到开发板lib目录下。 再次输入./opencv_pic命令运行,如下图所示: 最终在屏幕上显示图像
|