野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1002|回复: 1

[经验\资料] 【鲁班猫创意大赛2期】

[复制链接]
发表于 2023-8-28 22:08:33 | 显示全部楼层 |阅读模式
本帖最后由 流行科技 于 2023-11-27 20:13 编辑

一.前言
从网上来说,目前讲交叉编译OpenCV的很多,但是有些时候会有很多问题,我搭建的时候找了很多案例有些都有问题,试错多次后,决定还是要总结下,记录下本次编译出现的各种问题。
二.搭建交叉编译环境
图片 1.png
首先说明下,我使用的系统是鲁班猫的debian10系统镜像,是原来出厂就刷入的系统。所以我们直接在鲁班猫的资料中,找QT教程下对应的debain10下的gcc工具链,这个复制到我们的虚拟机中。
图片 2.png
我放到了虚拟机中的opt目录下。位置只要自己知道既可。
三.下载源码
图片 3.png
如上图选择sources既可下载。还有一个比较重要的东西,就是OpenCV的很多模块都在OpenCV-Contrib里面,所以还需下载其对应的其他模块版本。
图片 4.png
四.全部复制到一个文件夹下,交叉编译,确定自己需要的模块。
图片 5.png
首先我是在home下建立我们的opencv文件夹,把下载好的两个文件都放进去然后我们去分别解压两个文件,两个文件是不需要合并的。
sudo apt-get install cmake cmake-qt-gui cmake-curses-gui
安装cmake工具,这个肯定要的,我选择还安装他的图形化工具,图形化工具更加的直观一点。
图片 6.png
然后在opencv目录下新建两个文件,一个是构建MakeFile的,一个是交叉编译好之后安装库和头文件的路径。
图片 7.png
然后命令行启动cmake-gui
图片 8.png
首先就是这四个设置,第一个是我们opencv的路径,第二个是我们选择的build路径,第三个都勾选上,方便查看每个下面的模块。第四步会有弹窗如下。
图片 9.png
指定我们交叉编译工具链。
图片 10.png
第一个必须是Linux的拼写,不是小写首字母,linux这样的,还有教程说arm-linux的,还有aarch64-linux。我试了在这个版本下opencv库里必须是Linux其他的都是有问题的,而且很难解决,可能你编译的不需要外部的模块,不受影响,一旦需要外部模块记住只能是Linux
第二就是选择我们的编译器目录下的gcc交叉编译器,第三是g++。第四个可以选择交叉编译器的目录,也可以选择其他交叉编译模块的目录,添加模块后面涉及交叉编译其他的库,以及其他一些问题,这里先简要概括下,后面专门介绍增加模块。
第五块,按照我们的设置的来既可。第六点击finish既可。
图片 11.png
上面的爆红先不管,看下面的,按照我设置的Linux名称底下的信息中就很少会有报错信息。设置其他名称都有很多问题。上面爆红只需再次点击下configure既可。
图片 12.png
再次点击,就全消失了,下面就是把一些路径修改掉,加上去除一些库。
图片 13.png
我们可以通过找每个模块修改,也可以是搜索对应的东西去修改。首先就是这个构建完成后安装路径修改成为我们创建的arm-install路径,如下:
图片 14.png
图片 15.png
然后就是修改opencvmodules路径,这个包含很多模块,所以如果是不需要就不添加,添加了也会引起很多问题。我们添加上,因为在这个模块基础上我们还需要很多其他模块。
注意到后面的位置是引用到了modules路径上,不是他的根目录下。
图片 16.png
再次的configure添加完会有一些报错,这是下载东西连接不上,不用管他。第二个是上面新增的一些东西。
图片 17.png
再添加编译是链接的一些参数-lpthread -lrt -ldl-lpthread支持线程,-ldl避免未定义dlopen-lrt避免未定义
图片 18.png
目前应该还有些库没找到,所以我们先只去掉一个gtk既可,gtk是交叉编译中基本完成不了的,他是用来显示的,我们用他内部的一些显示函数,他直接出一个类似于win下桌面应用程序一样的东西,这个支持不了在arm下,一般会通过with_qt来解决这个问题。目前到这里就可以点击generate了,生成我们的MakeFile
图片 19.png
生成后直接到目录下make。遇报错再解决。
五.报错和解决
  1. undefined reference to `png_init_filter_functions_neon'
复制代码
图片 20.png
  1. /3rdparty/libpng/pngpriv.h
  2. /*#  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \*/
  3. # if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

  4. opencv_contrib-3.4.5/modules/xfeatures2d/src/vgg.cpp:490:20: fatal error: vgg_generated_120.i: No such file or directory
  5.            #include "vgg_generated_120.i"
复制代码
图片 21.png
  1. boostdesc_bgm.i

  2. boostdesc_bgm_bi.i

  3. boostdesc_bgm_hd.i

  4. boostdesc_lbgm.i

  5. boostdesc_binboost_064.i

  6. boostdesc_binboost_128.i

  7. boostdesc_binboost_256.i

  8. vgg_generated_120.i

  9. vgg_generated_64.i

  10. vgg_generated_80.i

  11. vgg_generated_48.i
复制代码

把上述文件放置在上述指定路径下后,make重新编译即可
  1. opencv-3.4.5/modules/stitching/include/opencv2/stitching/detail/matchers.hpp:52:12: fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or directory
  2. #  include "opencv2/xfeatures2d/cuda.hpp"
复制代码

图片 22.png
/home/src/software/opencv-3.4.2/modules/stitching/CMakeLists.txt中加入
  1. INCLUDE_DIRECTORIES("/home/src/software/opencv-3.4.2/opencv_contrib-3.4.2/modules/xfeatures2d/include")
复制代码
图片 23.png
根据报错信息,打开/home/src/software/opencv-3.4.2/modules/stitching/include/opencv2/stitching/detail/matchers.hpp文件,将52行
  1. #include "opencv2/xfeatures2d/cuda.hpp"
复制代码
替换成
  1. #include "/home/src/software/opencv-3.4.5/opencv_contrib-3.4.5/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp"
复制代码
六.测试
图片 24.png
出现上面的100%提示就意味着我们的编译完成了,接下来就是创建板子工程进行测试。
图片 25.png
看下我们安装后的文件列表吧。
图片 26.png
这些都是我们编译好的目录下的文件。
图片 27.png
在鲁班猫上进行创建QT工程。
图片 28.png
所有都默认既可。

图片 29.png
拉出来一个label控件,重新命名。

图片 30.png
然后通过scp命令把我们的库文件全部传到板子上。
图片 31.png
然后再pro文件中添加库和头文件位置声明,建议库用到啥添加啥。
图片 32.png
看下我们工程里面的文件。

图片 33.png
然后运行一个简单的案例,就是通过Mat转换下,在QT label里面显示一个图片。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-29 06:04 , Processed in 0.041361 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表