CUDA対応OpenCV
はじめに
**OpenCV(Open Source Computer Vision Library)**は、コンピュータビジョンと画像処理のために設計されたオープンソースのソフトウェアライブラリです。画像やビデオ解析、オブジェクト検出、顔認識、特徴抽出、カメラキャリブレーション、3D再構成などのタスク向けに、何百もの最適化されたアルゴリズムを提供します。
JetPackにはreComputerデバイスにOpenCVがプレインストールされていますが、デフォルトバージョンにはCUDAアクセラレーションが含まれていません。これは、OpenCVを標準的な画像処理に使用できますが、GPU加速機能(cv::cuda::GpuMat操作、DNN推論、リアルタイムビデオ処理など)はJetsonのGPUの恩恵を受けないことを意味します。
OpenCVをソースからCUDAサポート付きでコンパイルすることで、多くのコンピュータビジョタスクに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.")