欢迎光临
我们一直在努力

Jetson Orin Nano Super 从零编译 OpenCV 4.10 + CUDA 全指南(附踩坑实录)

Jetson Orin Nano Super 从零编译 OpenCV 4.10 + CUDA 全指南(附踩坑实录)

适用平台:NVIDIA Jetson Orin Nano Super (JetPack 36.5.0 / L4T R36.5.0)
OpenCV 版本:4.10.0(自编译,带 CUDA 12.6 + cuDNN 9.3)
最终成果:33 个 CUDA 加速模块,cv2.cuda.getCudaEnabledDeviceCount() 返回 1 ✅


一、前言

NVIDIA Jetson 开发板自带的 OpenCV 通常是不带 CUDA 加速的 Ubuntu 仓库版本。如果你需要 GPU 加速的图像处理(如 cv2.cuda.GpuMat、CUDA 滤波、DNN GPU 推理等),必须自行编译。

本文记录在 Jetson Orin Nano Super(8GB 内存) 上从源码编译 OpenCV 4.10 + CUDA 的完整过程,以及踩过的所有坑。


二、环境信息

项目详情
设备 NVIDIA Jetson Orin Nano Super (P3767-0005)
SoC tegra234, 6核 Cortex-A78AE
内存 7.4 GB(统一内存架构,GPU/CPU 共享)
系统 Ubuntu 22.04.5 LTS (aarch64)
内核 5.15.185-tegra
JetPack / L4T 36.5.0 (R36.5.0)
CUDA 12.6.68
cuDNN 9.3.0
GCC 11.4.0
CMake 3.26.4
Python 3.10.12
功耗模式 MAXN_SUPER(最高性能)

三、踩坑 ①:内存不足,编译时 SSH 断开、系统死机 🔥

现象

直接 make -j4 或 -j6 编译,内存瞬间耗尽,SSH 断开连接,板子假死。

根因

Orin Nano 只有 7.4GB 物理内存,而 NVCC 编译 CUDA 代码时单个进程就能吃掉 1~2GB。默认的 zram 交换空间(3.7GB)无法吸收突发内存需求。

解决方案:添加 SSD 交换文件

# 创建 8GB 交换文件
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 设置开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 验证
free -h
# total used free shared buff/cache available
# Swap: 11Gi 0B 11Gi ← 3.7G zram + 8G SSD = 11G

⚠️ 即使加了 swap,也不要用 -j4 以上,NVCC 并行编译时 swap 会导致极度卡顿。


四、踩坑 ②:GitHub 下载源码失败(TLS 错误、速度极慢)

解决方案:使用 Gitee 镜像

cd ~

# OpenCV 主仓库(Gitee 镜像,国内飞快)
git clone –depth 1 –branch 4.10.0 https://gitee.com/mirrors/opencv.git opencv-4.10.0

# opencv_contrib(Gitee 镜像只有到 4.9.0,4.10.0 需要用 GitHub 或手动下载 zip)
# 如果 GitHub 能访问:
git clone –depth 1 –branch 4.10.0 https://github.com/opencv/opencv_contrib.git opencv_contrib-4.10.0

# 如果不能,从其他地方下载 zip 解压也可

💡 opencv_contrib 的 Gitee 镜像只有 4.9.0。如果下载困难,可以跳过 contrib——CUDA 核心模块(cudaarithm、cudafilters、cudaimgproc 等)都在主仓库中。


五、踩坑 ③:CMake 配置时下载 3rdparty 文件失败

现象

ADE: Downloading v0.1.2d.zip from https://github.com/opencv/ade/archive/v0.1.2d.zip
Try 1 failed
CMake Warning: ADE: Download failed

根因

CMake 在配置阶段会从 GitHub 下载部分第三方依赖(如 ADE、wechat_qrcode 模型、xfeatures2d 描述符等),网络不通时会报 Warning。

解决方案

这些 3rdparty 文件大多不影响 CUDA 核心功能。CMake 配置仍会成功完成,编译时相关模块会自动跳过。如果想完整编译所有模块,确保网络能访问 GitHub 即可。

📌 ADE、wechat_qrcode、face 等模块下载失败不影响 CUDA 加速,核心 CUDA 模块(cudaarithm、cudafilters 等)不依赖这些文件。


六、踩坑 ④:编译时报 “CUDA: OpenCV requires enabled ‘cudev’ module”

现象

CMake Error at modules/core/CMakeLists.txt:158 (message):
CUDA: OpenCV requires enabled 'cudev' module from 'opencv_contrib'
repository: https://github.com/opencv/opencv_contrib

根因

CUDA 支持需要 cudev 模块,它位于 opencv_contrib 中。

解决方案

在 CMake 中指定 OPENCV_EXTRA_MODULES_PATH:

-D OPENCV_EXTRA_MODULES_PATH=/home/ysdhanji/opencv_contrib-4.10.0/modules


七、正式编译流程

7.1 CMake 配置

cd ~/opencv-4.10.0
mkdir build && cd build

cmake \\
-D CMAKE_BUILD_TYPE=Release \\
-D CMAKE_INSTALL_PREFIX=/usr/local \\
-D WITH_CUDA=ON \\
-D WITH_CUDNN=ON \\
-D OPENCV_DNN_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_CUFFT=ON \\
-D BUILD_TESTS=OFF \\
-D BUILD_PERF_TESTS=OFF \\
-D BUILD_EXAMPLES=OFF \\
-D BUILD_opencv_apps=OFF \\
-D BUILD_opencv_java=OFF \\
-D BUILD_opencv_python2=OFF \\
-D BUILD_opencv_python3=ON \\
-D OPENCV_EXTRA_MODULES_PATH=/home/ysdhanji/opencv_contrib-4.10.0/modules \\
-D OPENCV_GENERATE_PKGCONFIG=ON \\
.. 2>&1 | tee cmake.log

关键参数说明:

参数说明
CUDA_ARCH_BIN=8.7 Orin 的 SM 架构,只编译需要的,省时间
CUDA_ARCH_PTX="" 不生成 PTX,进一步省编译时间
BUILD_TESTS=OFF 跳过测试,省编译时间和空间
ENABLE_FAST_MATH=ON CUDA 快速数学优化
OPENCV_DNN_CUDA=ON DNN 模块使用 CUDA 后端(cuDNN)

配置成功后应看到:

— NVIDIA CUDA: YES (ver 12.6, CUFFT CUBLAS FAST_MATH)
— NVIDIA GPU arch: 87
— cuDNN: YES (ver 9.3.0)
— Configuring done
— Generating done

7.2 编译(关键!)

# ⚠️ 用 -j2,不要超过 -j2!
# 6 核 CPU 但只有 8GB 内存,NVCC 并行编译极易 OOM
make -j2 2>&1 | tee build.log

🕐 Orin Nano Super 上 -j2 编译约需 40~60 分钟。-j1 约需 90~120 分钟。

7.3 安装

sudo make install
sudo ldconfig


八、验证 CUDA 加速

python3 -c "import cv2; print('OpenCV:', cv2.__version__); print('CUDA devices:', cv2.cuda.getCudaEnabledDeviceCount())"

预期输出:

OpenCV: 4.10.0
CUDA devices: 1

如果返回 CUDA devices: 0,说明 CUDA 支持未正确编译。


九、编译成果

项目详情
OpenCV 版本 4.10.0
CUDA 模块数 11 个
安装大小 ~221 MB
磁盘占用 编译目录 ~2.5GB,安装后 ~221MB

已编译的 CUDA 模块:

cudaarithm cudabgsegm cudacodec cudafeatures2d
cudafilters cudaimgproc cudalegacy cudaobjdetect
cudaoptflow cudastereo cudawarping

可用的 CUDA 功能示例:

import cv2
import numpy as np

# GPU 矩阵操作
gpu_mat = cv2.cuda.GpuMat()
gpu_mat.upload(np.random.rand(1000, 1000).astype(np.uint8))

# GPU 高斯滤波
gpu_blur = cv2.cuda.createGaussianFilter(
cv2.CV_8UC1, cv2.CV_8UC1, (15, 15), 0
)
result = gpu_blur.apply(gpu_mat)

# GPU 图像缩放
gpu_resized = cv2.cuda.resize(gpu_mat, (500, 500))

# 下载回 CPU
cpu_result = result.download()


十、踩坑 ⑤:jetson-stats 不兼容 L4T 36.5.0

现象

sudo jtop
# [WARN] jetson-stats not supported for [L4T 36.5.0]

根因

PyPI 上的 jetson-stats 4.3.2 尚未适配 2026 年 1 月发布的 L4T 36.5.0。

解决方案:手动补丁

# 编辑版本映射文件
sudo vim /usr/local/lib/python3.10/dist-packages/jtop/core/jetson_variables.py

# 在 JP6 段添加一行:
NVIDIA_JETPACK = {
# ——– JP6 ——–
"36.5.0": "6.2.2", # ← 添加这行
"36.4.3": "6.2",
...
}

📌 GitHub 主分支已包含此修复,但 PyPI 尚未更新。后续直接 sudo pip3 install -U jetson-stats 即可。


十一、清理(可选)

编译完成后可删除源码目录节省空间:

# 保留源码(推荐,方便后续重新编译)
# 或者删除:
rm -rf ~/opencv-4.10.0 ~/opencv_contrib-4.10.0

# SSD swap 如需保留(推荐,后续编译 PyTorch 等也需要):
# 已加入 /etc/fstab,重启自动生效


十二、总结

坑症状解法
内存不足死机 SSH 断开、板子假死 加 8GB SSD swap,-j2 编译
GitHub 下载慢 TLS 错误、超时 用 Gitee 镜像
CMake 下载 3rdparty 失败 Warning 提示下载失败 不影响 CUDA 核心功能,可忽略
缺少 cudev 模块 CMake Error 加 OPENCV_EXTRA_MODULES_PATH
jetson-stats 不兼容 L4T 36.5.0 警告 手动补丁 jetson_variables.py

最终成果:OpenCV 4.10.0 + CUDA 12.6 + cuDNN 9.3,11 个 CUDA 模块全部可用,DNN GPU 推理就绪 🎉

在这里插入图片描述


📝 本文基于 2026 年 5 月 28 日实操记录。环境:NVIDIA Jetson Orin Nano Super, JetPack 36.5.0, L4T R36.5.0

赞(0)
未经允许不得转载:171主机测评 » Jetson Orin Nano Super 从零编译 OpenCV 4.10 + CUDA 全指南(附踩坑实录)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址