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/") 修改为相应的路径。

相关推荐
努力的小帅12 小时前
Python_OpenCV入门到精通——入门篇(看这一篇就足够了!!!)
图像处理·python·opencv·计算机视觉·视觉检测·视觉项目
嵌入式老牛16 小时前
第13章 图像处理之Harris角点检测算法(二)
图像处理·opencv·算法·计算机视觉
全栈视界师18 小时前
《机器人实践开发③:Foxglove可视化机器人的眼睛-视频》
opencv·机器人·音视频
却道天凉_好个秋18 小时前
OpenCV(三十四):绘制轮廓
人工智能·opencv·计算机视觉
CV码18 小时前
基于MediaPipe的静态手势识别实现
人工智能·opencv·计算机视觉·手势识别
Wild_Pointer.19 小时前
深入浅出OpenCV:编译并使用OpenCV
人工智能·opencv·计算机视觉
却道天凉_好个秋19 小时前
OpenCV(三十五):黑帽操作与顶帽操作
人工智能·opencv·计算机视觉
却道天凉_好个秋1 天前
OpenCV(三十三):什么是轮廓?
人工智能·opencv·计算机视觉
Dev7z1 天前
基于OpenCV和MATLAB的椭圆检测系统的设计与实现
人工智能·opencv·matlab
雍凉明月夜2 天前
视觉opencv学习笔记Ⅲ
笔记·opencv·学习