OpenCV con CUDA
Introducción
OpenCV (Open Source Computer Vision Library) es una biblioteca de software de código abierto diseñada para visión artificial y procesamiento de imágenes. Proporciona cientos de algoritmos optimizados para tareas como análisis de imágenes y video, detección de objetos, reconocimiento facial, extracción de características, calibración de cámaras y reconstrucción 3D.
JetPack viene con OpenCV preinstalado en los dispositivos reComputer, pero la versión predeterminada no incluye aceleración CUDA. Esto significa que aunque puede usar OpenCV para procesamiento de imágenes estándar, las funciones aceleradas por GPU (como operaciones cv::cuda::GpuMat, inferencia DNN o procesamiento de video en tiempo real) no se beneficiarán de la GPU del Jetson.
Al compilar OpenCV desde el código fuente con soporte CUDA, puede aprovechar la GPU para muchas tareas de visión artificial, lo que mejora significativamente el rendimiento para:
- Procesamiento de video en tiempo real (por ejemplo, transmisiones de cámara de alta resolución)
- Inferencia de aprendizaje profundo usando el módulo DNN de OpenCV
- Transformaciones de imagen y filtros que pueden paralelizarse en la GPU
- Pipelines de visión artificial en robótica o sistemas autónomos, donde la baja latencia y el alto rendimiento son críticos
Por lo tanto, compilar OpenCV con CUDA en Jetson le permite utilizar completamente la GPU para cargas de trabajo de visión artificial aceleradas, haciendo que las aplicaciones sean más rápidas y eficientes.
Este tutorial le guiará paso a paso sobre cómo instalar la versión de OpenCV que soporta CUDA.

Nota:El entorno de demostración es Jetpack 6.2
Compilar OpenCV con CUDA
Paso 1. Desinstale los paquetes de Python y los archivos de biblioteca
pip list | grep opencv
pip3 uninstall opencv-python
sudo apt purge libopencv*
sudo apt autoremove
sudo apt updatePaso 2. Instale las bibliotecas de dependencias requeridas para el proceso de compilación posterior.
Nota:¡Las siguientes dependencias son para el sistema Jetpack 6.2 Ubuntu 22.04. ¡Los nombres de las dependencias en otros entornos pueden ser diferentes!
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 gfortranPaso 3. Descargue el código fuente oficial.
Aquí, estamos usando la versión 4.10.0 de OpenCV y 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.0Paso 4. Compile e instale 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 Habilitar el soporte de FFMPEG permite a OpenCV leer y escribir varios formatos de video (avi, mp4, mkv). Si está desactivado, solo se puede acceder a transmisiones de video MJPEG/RAW.
-DWITH_CUDA=ON Habilitar aceleración CUDA
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda Especificar la ruta de instalación de CUDA
-DCUDA_ARCH_BIN=8.7 Especificar la capacidad de cómputo de la GPU objetivo designada. Diferentes módulos se enumeran en la tabla a continuación.
Modelo Jetson Arquitectura GPU SM Count Capacidad de Cómputo (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
Especifique la ruta de Python3, archivos de encabezado y bibliotecas dinámicas. Si hay un entorno virtual instalado, necesita modificarlo a la ruta del compilador de su propio entorno virtual.
Durante el proceso de CMake, se muestra cierta información de configuración.

Paso 5. Compile el proyecto e instale.
#¡El proceso de compilación puede llevar un tiempo! ¡Por favor espere con paciencia!
make -j4
sudo make install
Paso 6. Verificar la instalación.
Después de completar la instalación, abra jtop. Verá que "opencv with cuda" ha cambiado a "yes".
jtop
Pruebe si Python puede importar OpenCV exitosamente. Use el siguiente script de prueba de Python:
#python
import cv2
import numpy as np
print("OpenCV version:", cv2.__version__)
# Verificar si OpenCV tiene el módulo CUDA instalado
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")
# Probar la función de aceleración GPU
print("Creating test image...")
img = (np.random.rand(1080, 1920, 3) * 255).astype("uint8")
print("Test image shape:", img.shape)
# Subir a GPU
gpu_img = cv2.cuda_GpuMat()
gpu_img.upload(img)
print("Image uploaded to GPU successfully!")
# Realizar desenfoque gaussiano en la 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)
# Descargar resultado
result = gpu_result.download()
print("Gaussian blur completed on GPU!")
print("Result shape:", result.shape)
print("✅ ¡OpenCV 4.10.0 con soporte CUDA 12.6 está funcionando correctamente!")
else:
print("❌ No se encontró dispositivo CUDA o OpenCV no fue compilado con CUDA.")