Jetson Orin Nano 4GB 编译安装 OpenCV 4.14(CUDA 13.2 + cuDNN)

Jetson Orin Nano 4GB 编译安装 OpenCV 4.14(CUDA 13.2 + cuDNN)

一、环境说明

本文记录在 NVIDIA Jetson Orin Nano 4GB 上编译安装 OpenCV 4.14.0 的过程,启用 CUDA、cuDNN、FFmpeg、GStreamer 等功能,并编译 Python 3 接口。

硬件与软件环境:

项目 配置
硬件平台 NVIDIA Jetson Orin Nano 4GB
JetPack 7.2.1
操作系统 Ubuntu 24.04
CPU 架构 ARM64(aarch64)
Python 3.12
CUDA 13.2
cuDNN 9.20.0
OpenCV 4.14.0
C++ 标准 C++17

本文以实际 CMake 配置输出为依据,记录关键编译选项和功能支持情况。

jtop结果

二、安装依赖

安装 GTK、FFmpeg、Eigen、LAPACK 相关开发依赖,以及 Qt 相关依赖包:

sudo apt update

sudo apt install \
    libva-dev \
    liblapack-dev \
    libgtkglext1-dev \
    libgtkmm-3.0-dev \
    libeigen3-dev \
    libqt6core5compat6-dev \
    qt6-base-dev \
    ffmpeg \
    libglfw3-dev

说明: 本次编译最终使用 GTK3 作为 GUI 后端。启用 Qt 时遇到了编译失败的问题,暂时不进一步分析原因,因此本文不启用 Qt。GTK 已能满足当前使用需求。

三、下载 OpenCV 源码

创建源码目录:

mkdir -p ~/dev
cd ~/dev

下载 OpenCV 及其扩展模块,并切换到对应的 4.14 版本:

git clone --branch 4.14.0 --depth 1 \
    https://github.com/opencv/opencv.git opencv-4.14.0

git clone --branch 4.14.0 --depth 1 \
    https://github.com/opencv/opencv_contrib.git opencv_contrib-4.14.0

其中:

  • opencv:OpenCV 主仓库。
  • opencv_contrib:额外模块仓库,包含部分扩展算法和功能模块。
  • --depth 1:只获取指定分支的浅层历史记录,减少下载量。

主仓库与扩展模块仓库应使用相互匹配的版本。

四、配置 CMake

创建构建目录:

cd ~/dev/opencv-4.14.0
mkdir build
cd build

执行 CMake 配置:

cmake \
    -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.14.0/modules \
    -D WITH_CUDA=ON \
    -D BUILD_opencv_python3=ON \
    -D WITH_FFMPEG=ON \
    -D WITH_V4L=ON \
    -D WITH_QT=OFF \
    -D WITH_OPENGL=ON \
    -D ENABLE_FAST_MATH=ON \
    -D CUDA_FAST_MATH=ON \
    -D WITH_CUBLAS=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D WITH_GSTREAMER=ON \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D WITH_LAPACK=ON \
    -D CMAKE_CXX_STANDARD=17 \
    -D CMAKE_CXX_STANDARD_REQUIRED=ON \
    -D BUILD_DOCS=OFF \
    ..

关键参数说明

参数 作用
CMAKE_BUILD_TYPE=RELEASE 使用 Release 构建配置
CMAKE_INSTALL_PREFIX=/usr/local 指定安装目录
OPENCV_EXTRA_MODULES_PATH 指定 opencv_contrib 扩展模块目录
WITH_CUDA=ON 启用 CUDA 支持
WITH_CUBLAS=ON 启用 cuBLAS 支持
WITH_FFMPEG=ON 启用 FFmpeg 视频编解码后端
WITH_GSTREAMER=ON 启用 GStreamer 视频后端
WITH_V4L=ON 启用 V4L/V4L2 支持
WITH_OPENGL=ON 启用 OpenGL 支持
WITH_QT=OFF 不使用 Qt GUI 后端
ENABLE_FAST_MATH=ON 启用快速数学优化
CUDA_FAST_MATH=ON 启用 CUDA 快速数学优化
BUILD_opencv_python3=ON 构建 Python 3 接口
OPENCV_ENABLE_NONFREE=ON 启用 OpenCV 中标记为 non-free 的算法
CMAKE_CXX_STANDARD=17 使用 C++17 标准
BUILD_DOCS=OFF 不构建 OpenCV 文档

这里将 BUILD_DOCS 设置为 OFF,因为本次目标是安装可用的 OpenCV 库,并不需要构建文档。

检查 CMake 配置结果

配置完成后,重点确认以下项目:

  • NVIDIA CUDA: YES,版本 13.2。
  • NVIDIA GPU arch: 87,对应 Jetson Orin Nano 的 GPU 计算能力 8.7。
  • cuDNN: YES,版本 9.20.0。
  • Python 3: YES,版本 3.12.3。
  • FFmpeg: YES。
  • GStreamer: YES。
  • OpenGL: YES。
  • GUI: GTK3。
  • Non-free algorithms: YES。

我的结果:

-- General configuration for OpenCV 4.14.0 =====================================
--   Version control:               unknown
-- 
--   Extra modules:
--     Location (extra):            /home/jetson/dev/opencv_contrib-4.14.0/modules
--     Version control (extra):     unknown
-- 
--   Platform:
--     Timestamp:                   2026-10-07T16:10:35Z
--     Host:                        Linux 6.8.12-1021-tegra aarch64
--     CMake:                       4.4.3
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/gmake
--     Configuration:               RELEASE
--     Algorithm Hint:              ALGO_HINT_ACCURATE
-- 
--   CPU/HW features:
--     Baseline:                    NEON FP16
--       requested:                 DETECT
--     Dispatched code generation:  NEON_DOTPROD NEON_FP16 NEON_BF16
--       requested:                 NEON_FP16 NEON_BF16 NEON_DOTPROD
--       NEON_DOTPROD (3 files):    + NEON_DOTPROD
--       NEON_FP16 (2 files):       + NEON_FP16
--       NEON_BF16 (0 files):       + NEON_BF16
-- 
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++ standard:                17
--     C++ Compiler:                /usr/bin/c++  (ver 13.3.0)
--     C++ flags (Release):         -fsigned-char -ffast-math -fno-finite-math-only -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
--     C++ flags (Debug):           -fsigned-char -ffast-math -fno-finite-math-only -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/cc
--     C flags (Release):           -fsigned-char -ffast-math -fno-finite-math-only -W -Wall -Wreturn-type -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fsigned-char -ffast-math -fno-finite-math-only -W -Wall -Wreturn-type -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):      -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined  
--     Linker flags (Debug):        -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined  
--     ccache:                      NO
--     Precompiled headers:         NO
--     Extra dependencies:          m pthread cudart_static dl rt nppc nppial nppicc nppidei nppif nppig nppim nppist nppisu nppitc npps cublas cudnn cufft -L/usr/local/cuda-13.2/lib64 -L/usr/lib/aarch64-linux-gnu
--     3rdparty dependencies:
-- 
--   OpenCV modules:
--     To be built:                 alphamat aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency shape signal stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab wechat_qrcode xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 cannops cvv fastcv hdf java julia matlab ovis python2 sfm viz
--     Applications:                apps
--     Documentation:               NO
--     Non-free algorithms:         YES
-- 
--   GUI:                           GTK3
--     GTK+:                        YES (ver 3.24.41)
--     OpenGL support:              YES (/usr/lib/aarch64-linux-gnu/libGL.so /usr/lib/aarch64-linux-gnu/libGLU.so)
--     VTK support:                 NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/aarch64-linux-gnu/libz.so (ver 1.3)
--     JPEG:                        /usr/lib/aarch64-linux-gnu/libjpeg.so (ver 2.1.5-80)
--     WEBP:                        /usr/lib/aarch64-linux-gnu/libwebp.so (ver decoder: 0x0209, encoder: 0x020f, demux: 0x0107)
--     AVIF:                        NO
--     PNG:                         /usr/lib/aarch64-linux-gnu/libpng.so (ver 1.6.43)
--       Metadata Support:          EXIF XMP ICC
--     TIFF:                        /usr/lib/aarch64-linux-gnu/libtiff.so (ver 42 / 4.5.1)
--     JPEG 2000:                   build (ver 2.5.3)
--     OpenEXR:                     OpenEXR::OpenEXR (ver 3.1.5)
--     GIF:                         YES
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
-- 
--   Video I/O:
--     FFMPEG:                      YES
--       avcodec:                   YES (62.11.100)
--       avformat:                  YES (62.3.100)
--       avutil:                    YES (60.8.100)
--       swscale:                   YES (7.5.100)
--       avdevice:                  YES (62.1.100)
--     GStreamer:                   YES (1.24.2)
--     v4l/v4l2:                    YES (linux/videodev2.h)
--     Orbbec:                      YES
-- 
--   Parallel framework:            pthreads
-- 
--   Trace:                         YES (with Intel ITT(3.25.4))
-- 
--   Other third-party libraries:
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.4.0)
--     Custom HAL:                  YES (carotene (ver 0.0.1) KleidiCV (ver 26.03))
--     Protobuf:                    build (3.19.1)
--     Flatbuffers:                 builtin/3rdparty (25.9.23)
-- 
--   NVIDIA CUDA:                   YES (ver 13.2, CUFFT CUBLAS FAST_MATH)
--     NVIDIA GPU arch:             87
--     NVIDIA PTX archs:
-- 
--   cuDNN:                         YES (ver 9.20.0)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/jetson/dev/opencv-4.14.0/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.12.3)
--     Libraries:                   /usr/lib/aarch64-linux-gnu/libpython3.12.so (ver 3.12.3)
--     Limited API:                 NO
--     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.26.4)
--     install path:                lib/python3.12/dist-packages/cv2/python-3.12
-- 
--   Python (for build):            /usr/bin/python3
-- 
--   Java:                          
--     ant:                         NO
--     Java:                        NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 

另外,配置结果显示:

Lapack: NO
Eigen: YES (ver 3.4.0)

虽然安装了 liblapack-dev,但本次 OpenCV 配置并没有启用 LAPACK。安装依赖包并不代表对应功能一定会被 CMake 检测并启用。

需要注意,WITH_CUDA=ON 也不意味着所有 OpenCV 算法都会自动使用 GPU。具体模块是否提供 CUDA 实现,仍需参考相应模块的功能和 API。

五、编译与安装

1. 编译

在构建目录中执行:

cd ~/dev/opencv-4.14.0/build
make -j6

本次编译耗时约 1 小时 15 分钟。

4GB 的内存比较有限,可能出现内存不足。建议提前准备足够的交换空间(Swap),

-j6 表示最多并行执行 6 个构建任务。若出现 OOM(内存不足)或编译进程被系统终止,可以尝试降低并行度,例如:

make -j2

2. 安装

编译成功后执行:

sudo make install
sudo ldconfig

make install 将库文件、头文件和其他构建产物安装到 /usr/local;ldconfig 用于刷新动态链接器缓存。

六、验证安装结果

1. 查看 Python 接口

执行:

python3 -c 'import cv2; print(cv2.__version__); print(cv2.__file__)'

我的输出:

4.14.0
/usr/local/lib/python3.12/dist-packages/cv2/__init__.py

正常情况下应显示 OpenCV 版本 4.14.0,并给出当前实际导入的 cv2 模块路径。

如果版本或路径不符合预期,需要检查是否导入了系统中其他版本的 OpenCV。

如果需要可以复用的wheel包可以参考我的另一篇博客。

2. 查看编译功能

执行:

python3 -c 'import cv2; print(cv2.getBuildInformation())'

该命令会输出当前 Python 实际加载的 OpenCV 的完整编译信息,可用于检查 CUDA、cuDNN、FFmpeg、GStreamer、Python 等功能。

3. 使用 jtop 查看设备状态

如果已经安装 jetson-stats,可以运行:

jtop

jtop结果

posted @ 2026-10-09 20:32  icebooy  阅读(4)  评论(0)    收藏  举报