【IMAX6U移植OpenCV】

IMAX6U移植OpenCV V1.3

  • 一 安装通用交叉编译器
    • 1.1 下载通用交叉编译器
    • 1.2 安装通用交叉编译器
    • 1.3 验证通用交叉编译器
  • 二 搭建 OpenCV 3.4.1 的编译环境
    • 2.1 下载 OpenCV 3.4.1 源码
    • 2.2 配置 OpenCV 环境
    • 2.3 编译 OpenCV 源码
  • 三 Qt 项目中加入OpenCV
    • 3.1 Qt 项目的 pro 文件OpenCV
    • 3.2 .h头文件加入以下内容,注根据所需要添加相应的头文件
  • 四 安装cmake 和cmake-gui 工具

一 安装通用交叉编译器

1.1 下载通用交叉编译器

Linaro 出品的交叉编译器
请根据个人 Ubuntu 系统的位数,选择对应版本下载即可。
在这里插入图片描述

1.2 安装通用交叉编译器

gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

1. sudo mkdir /usr/local/arm         //创建/usr/local/arm 文件夹,为下面安装到/usr/local/arm 这个文件夹做准备。
2. sudo tar xf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz -C /usr/local/arm/   //解压交叉编译器压缩包至/usr/local/arm 目录下
3. 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 验证通用交叉编译器

  1. sudo apt-get install lsb-core lib32stdc++6 //要使用此编译器,还要在 Ubuntu 上安装一些库
  2. arm-linux-gnueabihf-gcc -v //查看安装的交叉编译器版本号.

二 搭建 OpenCV 3.4.1 的编译环境

安装完成交叉编译器后,才能开始搭建 OpenCV 的编译环境

2.1 下载 OpenCV 3.4.1 源码

OpenCV 官方源码
OpenCV 官方源码下载链接为 https://opencv.org/releases/ 本次选择的是 opencv-3.4.1 版本源码,

  • tar xf opencv-3.4.1.tar.gz
  • cd opencv-3.4.1/
  • ls
    在这里插入图片描述

2.2 配置 OpenCV 环境

  • mkdir build install //创建 build、 install 文件夹。 build 为构建文件夹, install 为安装文件夹
  • ls
    在这里插入图片描述
  • 安装 cmake 和 cmake-gui 工具 // 执行命令安装 sudo apt-get install cmake cmake-qt-gui cmake-curses-gui
  • cd build //进入 build 目录下,执行指令 cmake-gui,开始配置 OpenCV 的环境
  • cmake-gui
  • 指定我们源码的所在路径和构目录
    在这里插入图片描述
  • 选择 Unix Makefiles, 然后选择 Specify options for cross-compiling,再点击 Next。
    在这里插入图片描述
  • 填写交叉编译器的路径
    在这里插入图片描述
  • 下面就是您配置的信息,可以配置很多项,比如要编译哪些库等都可以在此选择编译或者不编译, 比如常见的 V4L2 都需要自己打开(V4L2 是处理摄像头类用的)。
    在这里插入图片描述
    点击 CMAKE,在 CMAKE_EXE_LINKER_FLAGS 处添加上“-lpthread -lrt -ldl”
    添加这些是指定依赖库的链接参数。
    上面的“-lxx”其中“-l”是大写字母“L”的小写字母“l”,不是数字“1”。
    在这里插入图片描述
    再在 CMAKE_INSTALL_PREFIX 处指定安装目录, 我们在上面已经新建了 install 安装目录。
    如果不指定,它会默认安装到 Ubuntu 系统目录/usr/local 下。
    再点击关闭。到这里我们已经完成配置
    在这里插入图片描述
    至此我们配置完, 现在我们需要生成 Makefile 等文件,我们先点击 Configure,再点击 Generate 就可以生成了。
    在这里插入图片描述

2.3 编译 OpenCV 源码

  1. 首先在源码目录 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

在这里插入图片描述
2. 返回于是 build 目录下,可以看到 bulid 目录下已经准备了构建文件。我们直接输入 make 构建即可。

cd build/
make -j 16

编译完成如下图。 在这里插入图片描述
如果有编译出错,先删除 build 目录下的所有文件,按(## 2.2 配置 OpenCV 环境 )重新再来一次! cmake-gui 尽量一次配置成功。

  1. make install //把库安装创建的 install 目录下。 然后使用 ls 指令查看安装目录 install。
make install
ls ../install

安装成功和查看安装如下:
在这里插入图片描述
至此我们已经编译完成 OpenCV 了。 将当前目录下的 lib 文件夹下的内容拷贝到正点原子 I.MX6U 驱动指南里的 busybox 文件系统/usr/lib 下即可。

三 Qt 项目中加入OpenCV

3.1 Qt 项目的 pro 文件OpenCV

打开 Qt 项目的 pro 文件, 在里面添加如下内容。

INCLUDEPATH += /home/alientek/opencv/install/include
LIBS += ../../lib/libopencv_core.so \
../../lib/libopencv_highgui.so \
../../lib/libopencv_imgproc.so \
../../lib/libopencv_videoio.so \
../../lib/libopencv_imgcodecs.so

3.2 .h头文件加入以下内容,注根据所需要添加相应的头文件

#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv/cv.h>

其中/home/alientek/opencv/install/include 需要改为自己的 OpenCV 路径 ,Qt 的 pro 文件需要 在上一章节 OpenCV 安装目录下的 lib 的前两级目录下才能正常使用!


四 安装cmake 和cmake-gui 工具

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spark系列1】DAG中Stage和Task的划分全流程

一、整体流程 每个Aciton操作会创建一个JOB&#xff0c;JOB会提交给DAGScheduler&#xff0c;DAGScheduler根据RDD依赖的关系划分为多个Stage&#xff0c;每个Stage又会创建多个TaskSet&#xff0c;每个TaskSet包含多个Task&#xff0c;这个Task就是每个分区的并行计算的任务。…

数灵通外链工具如何实现回传功能?

在数字营销的世界里&#xff0c;了解用户行为是至关重要的。数灵通提供了一个强大的回传功能&#xff0c;能够让我们在用户完成某个动作后&#xff0c;获取到这个动作的数据反馈。利用这个功能&#xff0c;企业可以更好地了解用户需求和行为&#xff0c;从而优化营销策略&#…

Docker Compose下载

使用插件版本&#xff1a; 进行安装 乌班图的安装方式参考&#xff1a;centos 的安装方式参考&#xff1b; sudo yum update sudo yum install docker-compose-plugin通过检查版本来验证 Docker Compose 是否已正确安装。 docker compose version 预期输出&#xff1a; Dock…

编译LVGL遇到的问题及解决方式

问题1: 编译选项报错, 未识别 -Wshift-negative-value 选项 Building project file: main/src/main.c Building project file: main/src/mouse_cursor_icon.c cc: error: unrecognized command line option ‘-Wshift-negative-value’ cc: error: unrecognized command line …

【目标跟踪】3D点云跟踪

文章目录 一、前言二、代码目录三、代码解读3.1、文件描述3.2、代码框架 四、关联矩阵计算4.1、ComputeLocationDistance4.2、ComputeDirectionDistance4.3、ComputeBboxSizeDistance4.4、ComputePointNumDistance4.5、ComputePointNumDistance4.6、result_distance 五、结果 一…

Node.js 文件系统操作指南

文章目录 Node.js 文件系统操作完全指南一、引言二、基本文件操作2.1 读取文件2.2 写入文件2.3 追加内容到文件 三、文件与目录的创建与删除3.1 创建文件3.2 创建目录3.3 删除文件3.4 删除目录 四、文件与目录的信息查询4.1 检查文件或目录是否存在4.2 获取文件信息4.3 获取目录…

main函数、_tmain函数和wmain函数的区别

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 今天碰到一个问题&#xff0c;算是彻底搞明白了main函数、_tmain函数和wmain函数的区别。就是使用vs2015新建一个控制台工程&#xff0c;如果入口函数是设…

C++ 11新特性之完美转发

概述 在C编程语言的演进过程中&#xff0c;C 11标准引入了一系列重大革新&#xff0c;其中之一便是“完美转发”机制。这一特性使得模板函数能够无损地传递任意类型的实参给其他函数或构造函数&#xff0c;从而极大地增强了C在泛型编程和资源管理方面的灵活性与效率。 完美转发…

探究HMAC算法:消息认证与数据完整性的完美结合

Hash-based Message Authentication Code&#xff08;基于哈希的消息认证码&#xff0c;简称HMAC&#xff09;算法作为一种广泛应用的消息认证码&#xff08;MAC&#xff09;算法&#xff0c;在现代信息安全领域起着至关重要的作用。本文将从算法原理、优缺点、实际应用等方面&…

20240128周报-网络太杂,Tomcat太难

今天来做个小总结吧&#xff0c;之前说想用几个月的时间将Java生态给整理一遍&#xff0c;该工作已经进入第三周了。先和各位老老板汇报一下上一周的工作&#xff0c;然后说一下本周的计划和后面的计划。 1.上周工作 上周的计划是将网络和Tomcat的内容梳理一番&#xff0c;但…

亚马逊要怎么运营?亚马逊运营主要运营内容有哪些?

一个店铺的成长发展少不了运营&#xff0c;而店铺的运营必须要有相关运营经验&#xff0c;才能将店铺做好&#xff0c;近几年亚马逊电商平台在不断的发展&#xff0c;亚马逊的运营模式非常独特&#xff0c;它借助于多种技术解决方案来提供最佳的客户体验。那么亚马逊要怎么运营…

你的MiniFilter安全吗?

简介 筛选器管理器 (FltMgr.sys)是Windows系统提供的内核模式驱动程序, 用于实现和公开文件系统筛选器驱动程序中通常所需的功能; 第三方文件系统筛选器开发人员可以使用FltMgr的功能可以更加简单的编写文件过滤驱动, 这种驱动我们通常称为MiniFilter, 下面是MiniFilter的基本…

python21-Python的字符串查找、替换相关方法

str还提供了如下常用的执行查找、替换等操作的方法。 startswith():判断字符串是否以指定子串开头。 endswith():判断字符串是否以指定子串结尾 find():查找指定子串在字符串中出现的位置&#xff0c;如果没有找到指定子串&#xff0c;则返回-1。 index():查找指定子串在字…

Java多线程--解决单例模式中的懒汉式的线程安全问题

文章目录 一、单例设计模式的线程安全问题&#xff08;1&#xff09;饿汉式没有线程安全问题&#xff08;2&#xff09;懒汉式线程安全问题1、案例2、方式1-同步方法3、方式2-同步代码块4、优化 二、代码&#xff08;1&#xff09;实现线程安全的懒汉式&#xff08;2&#xff0…

猫什么时候发腮?公认发腮效果好的生骨肉冻干推荐

猫什么时候发腮是许多猫主人非常关心的问题。在猫咪的成长过程中&#xff0c;发腮是一项重要的体征&#xff0c;也是猫咪成熟的标志。想要让猫咪拥有可爱的肉嘟嘟脸型&#xff0c;主人需要在适龄的年龄段加强营养补给&#xff0c;不要错失最佳发腮期。那么&#xff0c;猫咪的最…

pytorch交换数组元素坑

写 PermutePatch 时遇到一个 bug&#xff1a;在试图交换 PyTorch 数组的两个元素时&#xff0c;两个位置都变成同一个元素&#xff01;具体见测试代码。本文兼测几种交换情况&#xff1a; 两个 python 变量list 两个元素numpy 数组两个元素pytorch 数组两个元素 import numpy…

api接口1688商品详情接口采集商品详情数据商品价格详情页数据可支持高并发调用演示示例

接入1688商品详情API接口的步骤如下&#xff1a; 注册账号&#xff1a;首先&#xff0c;你需要在1688开放平台注册一个账号。 创建应用&#xff1a;登录后&#xff0c;在控制台中找到“我的应用”&#xff0c;点击“创建应用”。 获取API密钥&#xff1a;创建应用后&#xff…

【Linux】VMware Workstation16安装银河麒麟高级服务器操作系统V10 SP3 AMD64

目录 一、麒麟服务器概述 二、安装步骤 设置硬盘大小 完成配置 修改内存 处理器等设备配置 选择直接安装 配置磁盘 网络配置 设置root账号密码 开始安装 启动完成 一、麒麟服务器概述 银河麒麟高级服务器操作系统V10是针对企业级关键业务&#xff0c;适应虚拟化、云…

Android开发之动画

逐帧动画 通过在连续的帧之间快速切换来创建动画效果 var anim animationView.background as AnimationDrawable获取动画的Drawable资源anim.start()启动动画anim.stop()停止动画 private lateinit var animationView: ImageView private var flag: Boolean trueanimation…

C语言KR圣经笔记 6.8联合体 6.9位域

6.8 联合体&#xff08;union&#xff09; 联合体是一个可以&#xff08;在不同时间&#xff09;保存不同类型和大小的对象的变量&#xff0c;由编译器来跟踪大小和对齐要求。联合体提供了一种不用在程序中嵌入任何与机器相关的信息&#xff0c;而能够在单个存储区域内操作不同…