Jetson Orin NX 开发指南(5): 安装 OpenCV 4.6.0 并配置 CUDA 以支持 GPU 加速
一、前言
Jetson 系列的开发板 CPU 性能不是很强,往往需要采用 GPU 加速的方式处理图像数据,因此本文主要介绍如何安装带有 GPU 加速的 OpenCV,其中 GPU 加速通过 CUDA 来实现。
参考博客
Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0-CSDN博客Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.net/qq_44998513/article/details/131462679
二、安装 OpenCV 4.6.0
下载 opencv 源码,选择所需要的版本 opencv 4.6.0,相应的扩展 opencv_contrib 4.6.0,以及用于桥接 ROS 和 opencv 的 cv_bridge
Release OpenCV 4.6.0 · opencv/opencv · GitHub
Release 4.6.0 · opencv/opencv_contrib · GitHub
GitHub - ros-perception/vision_opencv at noetic
这里将 opencv 4.6.0 以及相应的扩展 opencv_contrib 4.6.0 下载到 ~/Documents 目录下,编译前现确定 opencv 的安装路径,我的安装路径是
CMAKE_INSTALL_PREFIX=/usr/local/
确定 Jetson Orin NX 的算力为 8.7,这个后面要用,参考
CUDA GPUs - Compute Capability | NVIDIA Developer
安装cuda 可以参考上一期文章
Jetson Orin NX 开发指南(4): 安装 cuda 和 realsense_想要个小姑娘的博客-CSDN博客
如果需要安装其他版本的 cuda 与算力的匹配情况可以参考
支持CUDA运算的显卡算力表_cuda算力排行_听风三千里的博客-CSDN博客
https://en.wikipedia.org/wiki/CUDA#GPUs_supported
接下来,进入 opencv 4.6.0 文件夹
cd ~/Documents/opencv-4.6.0/
mkdir build && cd build
预编译 opencv 4.6.0 及其扩展模块 opencv_contrib-4.6.0,生成 Makefiles 文件
cmake -D CMAKE_BUILD_TYPE=RELEASE \-D CMAKE_INSTALL_PREFIX=/usr/local/ \-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.6.0/modules \-D WITH_CUDA=ON \-D CUDA_ARCH_BIN=8.7 \-D CUDA_ARCH_PTX="" \-D ENABLE_FAST_MATH=ON \-D CUDA_FAST_MATH=ON \-D WITH_CUBLAS=ON \-D WITH_LIBV4L=ON \-D WITH_GSTREAMER=ON \-D WITH_GSTREAMER_0_10=OFF \-D WITH_QT=ON \-D WITH_OPENGL=ON \-D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" \-D WITH_TBB=ON \..
其中
CMAKE_INSTALL_PREFIX=/usr/local/ 为安装地址,
OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.6.0/modules 为扩展模块所在路径,
CUDA_ARCH_BIN=8.7 为 GPU 算力,
编译完成后如下所示
然后 make install 编译安装 opencv 4.6.0 及其扩展模块 opencv_contrib-4.6.0,电脑性能好的话可以多核编译 make -j8,如果出现兼容性错误的花建议用 make,速度慢一点,终端输入
sudo make install -j8
这里编译会很慢,耐心等待,只要一开始没有什么报错后面就不会报错。
经过漫长的等待,最后编译安装完成后如上所示,最后可以打开 jtop 查看带 GPU 加速的 OpenCV 是否已经安装完成,终端输入
jtop
点击最下反的 7 INFO 我们发现 OpenCV: 4.6.0 with CUDA: YES 表示以及安装成功!
三、配置 cv_bridge 功能包
因为 opencv 的数据和 ROS 的数据需要转化,因此需要通过 cv_bridge 这个桥接工具,接下来我们介绍怎么自己下载安装并配置一个自己的 cv_bridge 功能包。
首先,创建一个 ROS 的工作空间
mkdir -p ~/catkin_pkg/src/
cd ~/catkin_pkg/src/
然后,下载对应版本的源码,因为是 JetPack 5.1.2 对应 Ubuntu 20.04 因此下载 noetic 版本
GitHub - ros-perception/vision_opencv at noetic
终端输入
git clone https://github.com/ros-perception/vision_opencv.git -b noetic
下载完成后因为我们只需要 cv_bridge,所以只需保留 cv_bridge 文件夹,将其放在 ~/catkin_pkg/src/ 目录下,然后修改一下 cv_bridge 的配置文件,终端输入
cd ~/catkin_pkg/src/cv_bridge/
gedit ./CMakeLists.txt
添加自己安装的 带有 GPU 加速的 OpenCV 的 build 文件的路径
set(OpenCV_DIR "~/Documents/opencv-4.6.0/build/")
添加在 CMakeLists.txt 文件的如下位置
保存后编译该功能包,终端输入
cd ~/catkin_pkg/
catkin_make
如下结果表明编译成功
编译完成后将其路径添加到 ~/.bashrc 文件中,并刷新环境变量
echo "source ~/catkin_pkg/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
至此,自己的 cv_bridge 功能包就制作完成了,如果需要使用别的版本的 OpenCV,只需将 cv_bridge 中 set(OpenCV_DIR "~/Documents/opencv-4.6.0/build/") 修改为相应的路径。
相关文章:

Jetson Orin NX 开发指南(5): 安装 OpenCV 4.6.0 并配置 CUDA 以支持 GPU 加速
一、前言 Jetson 系列的开发板 CPU 性能不是很强,往往需要采用 GPU 加速的方式处理图像数据,因此本文主要介绍如何安装带有 GPU 加速的 OpenCV,其中 GPU 加速通过 CUDA 来实现。 参考博客 Ubuntu 20.04 配置 VINS-Fusion-gpu OpenCV 4.6.…...
Spring Security 6.x 系列【67】认证篇之安装 ApacheDS
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 概述2. 安装3. 连接工具1. 概述 官方文档 在前两篇文档中,我们简单了…...

理解线程池源码 【C++】面试高频考点
理解线程池 C 文章目录 理解线程池 C程序源码知识点emplace_back 和 push_back有什么区别?互斥锁 mutexcondition_variablestd::move()函数bind()函数join 函数 线程池的原理就是管理一个任务队列和一个工作线程队列。 工作线程不断的从任务队列取任务,然…...

BP神经网络应用案例
目录 背景介绍 【神经网络符号说明】 【建立网络拓扑结构】 【神经网络学习步骤】 步骤1 准备输入和输出样本 步骤2 确定网络学习参数 步骤3 初始化网络权值W和阀值B 步骤4 计算网络第一层的输入和输出 步骤5 计算中间层(隐含层输入和输出) 步骤…...

日常学习记录随笔-大数据之日志(hadoop)收集实战
数据收集(nginx)--->数据分析---> 数据清洗--->数据聚合计算---数据展示 可能涉及到zabix 做任务调度我们的项目 电商日志分析 比如说我们现在有一个系统,我们的数仓建立也要有一个主题 我这个项目是什么我要干什么定义方向 对用户进行分析,用户信息 要懂整个数据的流…...

【云计算】相关解决方案介绍
文章目录 1.1 云服务环境 Eucalyptus1.1.1 介绍1.1.2 开源协议及语言1.1.3 官方网站 1.2 开源云计算平台 abiCloud1.2.1 开源协议及语言1.2.2 官方网站 1.3 分布式文件系统 Hadoop1.3.1 开源协议及语言1.3.2 官方网站 1.4 JBoss云计算项目集 StormGrind1.4.1 开源协议及语言1.4…...

攻防世界题目练习——Crypto密码新手+引导模式(二)(持续更新)
题目目录 1. 转轮机加密2. easychallenge 上一篇:攻防世界题目练习——Crypto密码新手引导模式(一)(持续更新) 1. 转轮机加密 首先了解一下轮转机加密吧。 传统密码学(三)——转轮密码机 题目内容如下: …...

LeetCode【1】两数之和
题目: 代码: public int[] twoSum(int[] nums, int target) {int[] result new int[2];Map<Integer, Integer> map new HashMap<>();// for (int i 0; i < nums.length; i) { // 这么写不能防重复啊!注意这里不…...

【运维笔记】VMWare 另一个程序已锁定文件的一部分,进程无法访问
情景再现 这里使用的是VMware 17 解决办法 进入设置 点击选项,全选复制里面内容 进入文件夹,删除所有包含.lck后缀的文件和文件夹 再启动虚拟机即可...
[Springboot]统一响应和异常处理配置
背景 前后端分离情况下,后端接口通常只需要返回JSON数据。 但有时候因为某些原因可能会导致得不到正确的结果。 比如 因为登录密码错误,你不能直接返回错误信息和null,这样前端很难处理。 又比如 因为后端接口爆出了异常,也不能直…...

Redis第四五六章 持久化事务主从复制
Redis ⽀持 RDB 和 AOF 两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题, 当下次重启时利⽤之前持久化的⽂件即可实现数据恢复。 目录 第四章 持久化 4.1 RDB 4.1.1 触发机制 4.1.2 流程说明 4.1.3 RDB ⽂件的处理 4.1.4 RDB 的优…...

【强烈推荐】免费的PDF工具,包括PDF拆分/分割、转WORD等功能的免费在线软件工具,救了大命,找了半天什么pdf365、福xipdf、还有哔果pdf全是打着免费名义收费,烦死了
PDF拆分 - 图文工具箱 - imgtool.net,嘎嘎好用,主要是免费 除此之外,还有其他的功能,需要的可以去看看...

SpringMVC源码分析(二)启动过程之RequestMappingHandlerMapping分析
a、http请求中的url是如何与对应Handler的即Controller对应method映射的? 在上篇中提到在SpringMVC中,初始化9大内置组件的时候其中有一个组件就是HandlerMapping,在初始化HandlerMapping的时候会加载代码中所有标注了Controller和RequestMap…...
KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(7)
接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(6) 上一回讲到了drm_internal_framebuffer_create函数中的framebuffer_check函数。讲解了该函数的参数检查部分中的第二部分,本回对于该函数余下部分进行解析。 为了便于理解,再次贴出framebuffer_ch…...

2023 年 Arm A-Profile 架构发展
随着人工智能 (AI) 的兴起和安全威胁的加剧,计算需求不断发展,作为世界设备核心的基础计算架构也必须不断发展。这就是为什么我们的工程团队向普遍存在的 Arm 架构添加新功能和技术,然后软件团队确保软件尽可能无缝地适应这些未来的功能和技术。 Arm架构是如何开发的 Arm …...

2023年09月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
C/C++编程(1~8级)全部真题・点这里 Python编程(1~6级)全部真题・点这里 第1题:红与黑 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 时间限…...

CentOS系统/root根目录扩容(扩展逻辑卷)
具体操作步骤 1、查看本机磁盘环境挂载情况 2、添加磁盘分区 3、开始扩容 4、同步到文件系统 1、查看本机磁盘环境挂载情况 [rooticon ~]# df -lh 可以看到/dev/mapper/centos-root 路径下容量为50G,我们要给这个路径下的容量扩容:[rooticon ~]# lsblk…...

苍穹外卖(三) 员工分页及技术实现细节
2. 员工分页查询 2.1 需求分析和设计 2.1.1 产品原型 2.1.2 接口设计 2.2 代码开发 2.2.1 设计DTO类 根据请求参数进行封装 2.2.2 封装PageResult 后面所有的分页查询,统一都封装为PageResult对象。 员工信息分页查询后端返回的对象类型为: Result 2.…...
二进制部署MySQL8.0
1、下载MySQL官方包 ## 下载MySQL [rootlocalhost ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz2、解压并移动安装包 # 解压安装包 [rootlocalhost ~]# tar xf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 移动 mv…...

全力以赴,火山引擎边缘云代表团出战亚运会
END 未来,火山引擎边缘云赛事阵容将继续全力以赴,通过领先、可信赖的云和智能技术,助力游戏行业呈现更加精彩的竞技赛事。...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...