CUDA支持的OpenCV
简介
**OpenCV(Open Source Computer Vision Library)**是一个开源软件库,专为计算机视觉和图像处理设计。它提供了数百种优化算法,用于图像和视频分析、目标检测、人脸识别、特征提取、相机校准和3D重建等任务。
JetPack在reComputer设备上预装了OpenCV,但默认版本不包含CUDA加速。这意味着虽然您可以将OpenCV用于标准图像处理,但GPU加速功能(如cv::cuda::GpuMat操作、DNN推理或实时视频处理)将不会受益于Jetson的GPU。
通过从源代码使用CUDA支持编译OpenCV,您可以利用GPU进行许多计算机视觉任务,这显著提高了以下方面的性能:
- 实时视频处理(例如高分辨率摄像头流)
- 使用OpenCV DNN模块进行深度学习推理
- 可以在GPU上并行化的图像变换和滤镜
- 机器 人或自主系统中的计算机视觉管道,低延迟和高吞吐量至关重要
因此,在Jetson上使用CUDA编译OpenCV使您能够充分利用GPU进行加速的计算机视觉工作负载,使应用程序更快、更高效。
本教程将逐步指导您如何安装支持CUDA的OpenCV版本。

注意:演示环境为Jetpack 6.2
使用CUDA编译OpenCV
步骤1. 卸载Python包和库文件
pip list | grep opencv
pip3 uninstall opencv-python
sudo apt purge libopencv*
sudo apt autoremove
sudo apt update步骤2. 安装后续编译过程所需的依赖库。
注意:以下依赖项适用于Jetpack 6.2 Ubuntu 22.04系统。其他环境的依赖项名称可能不同!
sudo apt install -y build-essential checkinstall cmake pkg-config yasm git gfortran
sudo apt update
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install -y libjpeg8-dev libpng-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libv4l-dev libdc1394-dev libopenjp2-7-dev
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libtbb-dev libatlas-base-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 v4l-utils
sudo apt install -y \
python3-dev python3-numpy \
libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libxvidcore-dev libx264-dev libgtk-3-dev libcanberra-gtk3-dev \
libatlas-base-dev gfortran步骤3. 下载官方源代码。
这里我们使用OpenCV的4.10.0版本和OpenCV_contrib。

wget https://github.com/opencv/opencv/archive/refs/tags/4.10.0.zip
unzip 4.10.0.zip
rm 4.10.0.zip
wget https://github.com/opencv/opencv_contrib/archive/refs/tags/4.10.0.zip
unzip 4.10.0.zip -d opencv-4.10.0/
cd opencv-4.10.0步骤4. 构建并安装OpenCV。
mkdir build
cd build
export PATH=/usr/local/cuda-12.6/bin:$PATH && export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENCV_ENABLE_NONFREE=ON \
-DWITH_FFMPEG=ON \
-DWITH_CUDA=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.6 \
-DCUDA_ARCH_BIN=8.7 \
-DCUDA_ARCH_PTX="" \
-DENABLE_FAST_MATH=ON \
-DCUDA_FAST_MATH=ON \
-DWITH_CUBLAS=ON \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DPYTHON3_EXECUTABLE=$(which python3) \
-DPYTHON3_INCLUDE_DIR=$(python3 -c "from sysconfig import get_paths as gp; print(gp()['include'])") \
-DPYTHON3_LIBRARY=$(python3 -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR') + '/libpython' + sysconfig.get_python_version() + '.so')") \
-DOPENCV_EXTRA_MODULES_PATH=/home/seeed/Downloads/opencv_contrib/modules \
..
-DWITH_FFMPEG=ON 启用FFMPEG支持使OpenCV能够读取和写入各种视频格式(avi、mp4、mkv)。如果关闭,则只能访问MJPEG/RAW视频流。
-DWITH_CUDA=ON 启用CUDA加速
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda 指定CUDA安装路径
-DCUDA_ARCH_BIN=8.7 指定目标GPU的计算能力。不同的模块列在下表中。
Jetson型号 GPU架构 SM数量 计算能力 (CUDA_ARCH_BIN) Jetson Nano Maxwell 128 5.3 Jetson TX1 Maxwell 256 5.3 Jetson TX2 Pascal 256 6.2 Jetson Xavier NX Volta 384 7.2 Jetson AGX Xavier Volta 512 7.2 Jetson Orin Nano Ampere 512 8.7 Jetson Orin NX Ampere 1024 8.7 Jetson AGX Orin Ampere 2048 8.7 -DPYTHON3_EXECUTABLE=$(which python3) -DPYTHON3_INCLUDE_DIR -DPYTHON3_LIBRARY
指定Python3、头文件和动态库的路径。如果安装了虚拟环境,需要将其修改为您自己的虚拟环境的编译器路径。
在CMake过程中,会显示一些配置信息。

步骤5. 构建项目并安装。
#编译过程可能需要一段时间!请耐心等待!
make -j4
sudo make install
步骤6. 验证安装。
安装完成后,打开jtop。您将看到"opencv with cuda"已变为"yes"。
jtop
测试Python是否能成功导入OpenCV。使用以下Python测试脚本:
#python
import cv2
import numpy as np
print("OpenCV version:", cv2.__version__)
# 检查OpenCV是否安装了CUDA模块
print("CUDA available in OpenCV:", cv2.cuda.getCudaEnabledDeviceCount() > 0)
if cv2.cuda.getCudaEnabledDeviceCount() > 0:
print("Number of CUDA devices:", cv2.cuda.getCudaEnabledDeviceCount())
cv2.cuda.setDevice(0)
print("CUDA device set to 0")
# 测试GPU加速功能
print("Creating test image...")
img = (np.random.rand(1080, 1920, 3) * 255).astype("uint8")
print("Test image shape:", img.shape)
# 上传到GPU
gpu_img = cv2.cuda_GpuMat()
gpu_img.upload(img)
print("Image uploaded to GPU successfully!")
# 在GPU上执行高斯模糊
print("Performing Gaussian blur on GPU...")
gaussian = cv2.cuda.createGaussianFilter(gpu_img.type(), gpu_img.type(), (15, 15), 0)
gpu_result = gaussian.apply(gpu_img)
# 下载结果
result = gpu_result.download()
print("Gaussian blur completed on GPU!")
print("Result shape:", result.shape)
print("✅ OpenCV 4.10.0 with CUDA 12.6 support is working correctly!")
else:
print("❌ No CUDA device found or OpenCV not built with CUDA.")