OpenCV, OpenCV Contrib のインストール,CUDA 対応可能(ソースコードを使用)(Ubuntu 上)

Ubuntu で,OpenCV をソースコードからビルドして,インストールする手順を説明する.

ユースケース.OpenCV は 「sudo apt install libopencv-dev python3-opencv」でインストールできるが,このパッケージは Ubuntu のリリース時点のバージョンに固定され,CUDA 対応や opencv_contrib のモジュールは無効である.新しいバージョンを使いたい場合,NVIDIA CUDA を有効にしたい場合,opencv_contrib のモジュールを使いたい場合は,ソースコードからビルドする.

目次

  1. 前準備
  2. Ubuntu で OpenCV のビルドとインストール

【関連する外部ページ】

【サイト内の関連ページ】

OpenCV

OpenCV は,実時間コンピュータビジョン (real time computer vision) の アルゴリズムと文書とサンプルコードの集まり.

本ページでは OpenCV 4.14.0(4 系の安定版)を用いる.OpenCV 5.0.0 も公開されているが,API に非互換の変更があるため,既存のプログラムを動かす目的では 4 系を選ぶ.

前準備

Ubuntu のシステム更新

Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する.これは,パッケージ情報を最新の状態に保ち,インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである.

Ubuntu のインストールはこちらの別ページで説明する.

# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で実際に再起動が必要な場合のみ実行を推奨
# sudo shutdown -r now

C/C++ コンパイラー,make,パッケージツール,qmake のインストール

端末で,次のコマンドを実行する.

sudo apt -y install build-essential gcc g++ make libtool texinfo dpkg-dev pkg-config
sudo apt -y install qt5-qmake qtbase5-dev qtbase5-dev-tools

NVIDIA ドライバ,NVIDIA CUDA ツールキット,NVIDIA cuDNN のインストール(Ubuntu 上)

CUDA 対応の OpenCV をビルドするときに必要である.CUDA 対応が不要なときは,この節は行わない.

Ubuntu での NVIDIA ドライバ,NVIDIA CUDA ツールキット,NVIDIA cuDNN のインストール: 別ページ »で説明

本ページの記述例では NVIDIA CUDA ツールキット 13.3(インストール先 /usr/local/cuda-13.3)と NVIDIA cuDNN 9 を前提としている.別のバージョンを使うときは,バージョン番号とディレクトリ名を読み替える.

CUDA 13 系では,サポートされる GPU のコンピュートケイパビリティは 7.5 (Turing) 以上である.これより古い GPU を使うときは,CUDA 12 系を選ぶ.

最新のバージョン番号とダウンロード先は次のページで確認できる.

Git, cmake, curl のインストール(Ubuntu 上)

インストールするには,端末で,次のコマンドを実行する.

sudo apt -y install git cmake cmake-curses-gui cmake-gui curl

Python3 開発用ファイル,pip, setuptools, venv のインストール(Ubuntu 上)

Python のインストールは行わない(Ubuntu のシステム Python を用いる).

Ubuntu のシステム Python を用いるとき,Python は python3 コマンドで起動する.

pip でパッケージを入れるときは,システム Python を壊さないために,venv による仮想環境を作り,その中で pip を使う.Ubuntu 23.04 以降では,システム Python に対する pip の実行は既定で拒否される (PEP 668).

Ubuntu での Python 開発環境(JupyterLab, spyder, nteract)のインストール: 別ページ »で説明

Python3 開発用ファイル,pip, setuptools, venv のインストール

端末で,次のコマンドを実行する.

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install python-is-python3 python3-dev python3-pip python3-setuptools python3-venv python3-numpy build-essential
python3-numpy は,OpenCV の Python バインディングのビルドに必要である.これが無いと,cmake の結果で Python 3 のモジュールがビルド対象から外れる.

Ceres Solver のインストール(Ubuntu 上)

opencv_contrib の sfm モジュールなどで使用する.

端末で,次のコマンドを実行する.

sudo apt -y install libceres-dev

Intel oneAPI Math Kernel Library (oneMKL) のインストール

Intel の数値演算ライブラリを使いたいときは,インストールしておく (必ずしもインストールする必要はない).

Intel oneAPI Math Kernel Library のインストールは,別ページ »で説明

Ubuntu で OpenCV のビルドとインストール

  1. ソースパッケージのリポジトリの有効化

    次の手順で使う「apt build-dep」は,ソースパッケージのリポジトリ (deb-src) が有効になっている必要がある.

    端末で,次のコマンドを実行する.

    # Ubuntu 24.04 以降(deb822 形式)
    sudo sed -i 's/^Types: deb$/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources
    # Ubuntu 22.04 以前(従来形式)のときは次を実行
    # sudo sed -i 's/^# deb-src/deb-src/' /etc/apt/sources.list
    sudo apt update
    
  2. 前提ソフトウェア類

    端末で,次のコマンドを実行する.

    sudo apt -y build-dep libopencv-dev
    sudo apt -y install libgtk-3-dev
    sudo apt -y install libavcodec-dev libavformat-dev libswscale-dev libavutil-dev libv4l-dev
    sudo apt -y install libjpeg-dev libpng-dev libtiff-dev libopenjp2-7-dev libwebp-dev
    sudo apt -y install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
    sudo apt -y install openni2-utils libopenni2-dev
    sudo apt -y install libatlas-base-dev libopenblas-dev liblapack-dev liblapacke-dev libtbb-dev libeigen3-dev
    sudo apt -y install libprotobuf-dev protobuf-compiler libgflags-dev libgoogle-glog-dev libhdf5-dev
    
    JPEG 2000 の入出力は,かつて libjasper を用いていたが,OpenCV 4 では libopenjp2 を用いる.
  3. OpenCV のバージョンの確認

    次のページで,リリース済みのバージョン番号を確認できる.

    https://github.com/opencv/opencv/releases

    opencv と opencv_contrib は,同一のバージョン番号のものを組み合わせる.

  4. ソースコードのダウンロードと cmake の実行

    端末で,次のコマンドを実行する.

    -b 4.14.0」でバージョンを指定している.

    /usr/local/cuda-13.3」のところは,NVIDIA CUDA ツールキットをインストールしたディレクトリに読み替えること.

    -D CUDA_ARCH_BIN=8.9」のところは,使用する GPU のコンピュートケイパビリティに読み替えること(例: Turing は 7.5,Ampere の GeForce RTX 30 系は 8.6,Ada の GeForce RTX 40 系は 8.9,Blackwell の GeForce RTX 50 系は 12.0).指定を省略すると全アーキテクチャ向けにビルドされ,ビルド時間とバイナリサイズが大きく増える.

      cd /usr/local
      sudo rm -rf opencv
      sudo git clone --recursive -b 4.14.0 https://github.com/opencv/opencv.git
      sudo chown -R ${USER} /usr/local/opencv
      cd /usr/local
      sudo rm -rf opencv_contrib
      sudo git clone --recursive -b 4.14.0 https://github.com/opencv/opencv_contrib.git
      sudo chown -R ${USER} /usr/local/opencv_contrib
      cd /usr/local/opencv
      sudo rm -rf build
      sudo mkdir build
      sudo chown -R ${USER} /usr/local/opencv/build
      cd build
      CUDA_PATH="/usr/local/cuda-13.3" CFLAGS="-I/usr/local/cuda-13.3/include" LDFLAGS="-L/usr/local/cuda-13.3/lib64" \
      cmake .. -D CMAKE_BUILD_TYPE=RELEASE \
      -D BUILD_opencv_world=ON \
      -D BUILD_opencv_apps=ON \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D OPENCV_EXTRA_MODULES_PATH=/usr/local/opencv_contrib/modules \
      -D OpenBLAS_INCLUDE_DIR=/usr/include/x86_64-linux-gnu \
      -D OpenBLAS_LIB=/usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblas.so \
      -D BUILD_opencv_python2=OFF \
      -D BUILD_opencv_python3=ON \
      -D PYTHON3_EXECUTABLE=/usr/bin/python3 \
      -D WITH_GTK=ON \
      -D WITH_TBB=ON \
      -D WITH_MKL=OFF \
      -D WITH_CUDA=ON \
      -D CUDA_FAST_MATH=ON \
      -D WITH_CUBLAS=ON \
      -D WITH_CUDNN=ON \
      -D OPENCV_DNN_CUDA=ON \
      -D CUDA_ARCH_BIN=8.9 \
      -D WITH_NVCUVID=OFF \
      -D BUILD_EXAMPLES=ON \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_TESTS=ON \
      -D INSTALL_C_EXAMPLES=ON \
      -D INSTALL_BIN_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON
    
    補足説明
    • NVIDIA CUDA使わないときは,次の設定を外す.あわせて,先頭の CUDA_PATH, CFLAGS, LDFLAGS の指定も外す.
        -D WITH_CUDA=ON \
        -D CUDA_FAST_MATH=ON \
        -D WITH_CUBLAS=ON \
        -D WITH_CUDNN=ON \
        -D OPENCV_DNN_CUDA=ON \
        -D CUDA_ARCH_BIN=8.9 \
        -D WITH_NVCUVID=OFF \
      
    • WITH_NVCUVID は,NVIDIA Video Codec SDK のヘッダファイルを別途入手して配置しないとビルドが失敗するため,OFF にしている.
    • OPENCV_ENABLE_NONFREE=ON は,SIFT の旧実装や SURF など,特許・ライセンス上の制約があるアルゴリズムを有効にする設定である.用途によっては OFF にする.
    • Intel oneMKL を使いたいときは「-D WITH_MKL=ON」に設定し,CFLAGS に mkl.h のあるディレクトリを追加する(oneAPI の既定のインストール先では /opt/intel/oneapi/mkl/latest/include).MKL と OpenBLAS のどちらか一方を選ぶ.Intel oneMKL のインストールは,別ページ »で説明
    • cmake のオプションは「ccmake ..」で一覧・変更できる.
    • cmake の実行で「CMake Generate step failed. Build files cannot be regenerated correctly」と表示される場合がある. この場合には git の実行(2箇所ある)で「-b 4.14.0」のようにリリース版のバージョンを指定する(開発中のブランチを使わない)と解決する場合がある.
  5. cmake の結果の確認

    エラーメッセージが出ていないことを確認する.あわせて,画面に表示される設定の要約で「NVIDIA CUDA」「cuDNN」「Python 3」の各項目が意図どおりになっていることを確認する.

  6. ビルド

    端末で,次のコマンドを実行する.「-j$(nproc)」は,CPU のコア数だけ並列にビルドするという指定である.メモリ不足でビルドが失敗するときは,並列数を減らす(例: 「make -j4」).

    cd /usr/local/opencv/build
    CUDA_PATH="/usr/local/cuda-13.3" CFLAGS="-I/usr/local/cuda-13.3/include" LDFLAGS="-L/usr/local/cuda-13.3/lib64" \
    make -j$(nproc)
    
  7. ビルドの結果の確認

    エラーメッセージが出ていないことを確認する.

  8. インストール

    端末で,次のコマンドを実行する.

    sudo make install
    sudo /sbin/ldconfig
    
  9. インストールの結果の確認

    エラーメッセージが出ていないことを確認する.

  10. バージョン確認

    端末で,次のコマンドを実行する.

    python3 -c "import cv2; print( cv2.__version__ )"
    
    バージョン番号が表示されれば OK.下の図とは違うバージョンが表示されることがある.

    「ModuleNotFoundError: No module named 'cv2'」と表示されるときは,cv2 のインストール先が Python の検索パスに入っていない.次のコマンドでインストール先を確認し,環境変数 PYTHONPATH に設定する.

    find /usr/local/lib -name "cv2*.so"
    export PYTHONPATH=/usr/local/lib/python3/dist-packages:${PYTHONPATH}
    
    python3 -c "import cv2; print( cv2.getBuildInformation() )"
    
    ビルド時の設定の一覧が表示される.CUDA 対応を有効にしてビルドしたときは,「NVIDIA CUDA」の項目に CUDA のバージョンとアーキテクチャが表示される.

OpenCV を用いた画像表示の例

OpenCV で画像表示を行う C++ プログラム

ファイル名 a.cpp で保存.

#include<opencv2/opencv.hpp>

int main (int argc, char *argv[])
{
  cv::Mat bgr = cv::imread("/usr/local/share/opencv4/samples/data/fruits.jpg");
  cv::imshow("", bgr);
  cv::waitKey(0);
  cv::destroyAllWindows();

  return 0;
}

端末で,次のコマンドを実行する.

g++ -I/usr/local/include/opencv4 -o a.out a.cpp -L/usr/local/lib -lopencv_world
./a.out

ソースコードからビルドするときに「-D BUILD_opencv_world=ON」を付けなかったときは, 端末で,次のコマンドを実行する.

g++ -I/usr/local/include/opencv4 -o a.out a.cpp -L/usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgcodecs
./a.out

pkg-config を使うときは,端末で,次のコマンドを実行する.

g++ -o a.out a.cpp $(pkg-config --cflags --libs opencv4)
./a.out

画像表示が行われる.画面をクリックし,なにかのキーを押して閉じる.

OpenCV で画像表示を行う Python プログラム

Python プログラムの実行

Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.

Python のまとめ: 別ページ »にまとめ

端末で,次のコマンドを実行する.

python3

Python の対話環境で,次のプログラムを実行する.

import cv2
CVSAMPLEDAT="/usr/local/share/opencv4/samples/data/"
bgr = cv2.imread(CVSAMPLEDAT + "fruits.jpg")
cv2.imshow("", bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()

画像が表示されるので確認. このあと,ウインドウの右上の「x」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる