OpenCV, OpenCV Contrib のインストール,CUDA 対応可能(ソースコードを使用)(Ubuntu 上)
ユースケース.OpenCV は 「sudo apt install libopencv-dev python3-opencv」でインストールできるが,このパッケージは Ubuntu のリリース時点のバージョンに固定され,CUDA 対応や opencv_contrib のモジュールは無効である.新しいバージョンを使いたい場合,NVIDIA CUDA を有効にしたい場合,opencv_contrib のモジュールを使いたい場合は,ソースコードからビルドする.
【目次】
【関連する外部ページ】
- OpenCV の公式ページ: https://opencv.org
- GitHub の OpenCV のページ: https://github.com/opencv/opencv/releases
- GitHub の opencv_contrib のページ: https://github.com/opencv/opencv_contrib/releases
【サイト内の関連ページ】
- OpenCV について [PDF] , [パワーポイント]
- OpenCV のインストール,画像表示を行う C++ プログラムの実行手順: 別ページ »で説明
- OpenCV 4 の Python プログラム: 別ページ »にまとめ
- OpenCV 4 の C/C++ プログラム: 別ページ »にまとめている.
OpenCV
OpenCV は,実時間コンピュータビジョン (real time computer vision) の アルゴリズムと文書とサンプルコードの集まり.
- 2500 以上のアルゴリズムを収録(OpenCV 公式ページの記載による)
- 顔検出,物体認識,人間の動きの分類,カメラの動きの追跡,オブジェクトの動きの追跡,3次元モデルの抽出,ステレオカメラからの3次元点群の生成,イメージスティッチング,類似画像の検索,赤目の除去,眼球運動の追跡,AR の機能など
- ライセンス: Apache 2 ライセンス(OpenCV 4.5.0 以降.それ以前は 3-clause BSD ライセンス)
- インタフェース: C++, Python, Java, JavaScript
- マシン: Windows, Linux, macOS, iOS, Android
本ページでは OpenCV 4.14.0(4 系の安定版)を用いる.OpenCV 5.0.0 も公開されているが,API に非互換の変更があるため,既存のプログラムを動かす目的では 4 系を選ぶ.
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する.これは,パッケージ情報を最新の状態に保ち,インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである.
# パッケージリストの情報を更新
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 のインストール: 別ページ »で説明
CUDA 13 系では,サポートされる GPU のコンピュートケイパビリティは 7.5 (Turing) 以上である.これより古い GPU を使うときは,CUDA 12 系を選ぶ.
最新のバージョン番号とダウンロード先は次のページで確認できる.
- NVIDIA ドライバ: https://www.nvidia.com/download/index.aspx
- NVIDIA CUDA ツールキット: https://developer.nvidia.com/cuda-toolkit-archive
- NVIDIA cuDNN: https://developer.nvidia.com/cudnn-downloads
Git, cmake, curl のインストール(Ubuntu 上)
インストールするには,端末で,次のコマンドを実行する.
sudo apt -y install git cmake cmake-curses-gui cmake-gui curl
Python3 開発用ファイル,pip, setuptools, venv のインストール(Ubuntu 上)
Python のインストールは行わない(Ubuntu のシステム Python を用いる).
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
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 のビルドとインストール
- ソースパッケージのリポジトリの有効化
次の手順で使う「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 - 前提ソフトウェア類
端末で,次のコマンドを実行する.
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-devJPEG 2000 の入出力は,かつて libjasper を用いていたが,OpenCV 4 では libopenjp2 を用いる. - OpenCV のバージョンの確認
次のページで,リリース済みのバージョン番号を確認できる.
https://github.com/opencv/opencv/releases
opencv と opencv_contrib は,同一のバージョン番号のものを組み合わせる.
- ソースコードのダウンロードと 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」のようにリリース版のバージョンを指定する(開発中のブランチを使わない)と解決する場合がある.
- NVIDIA CUDA を使わないときは,次の設定を外す.あわせて,先頭の CUDA_PATH, CFLAGS, LDFLAGS の指定も外す.
- cmake の結果の確認
エラーメッセージが出ていないことを確認する.あわせて,画面に表示される設定の要約で「NVIDIA CUDA」「cuDNN」「Python 3」の各項目が意図どおりになっていることを確認する.
- ビルド
端末で,次のコマンドを実行する.「-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)
- ビルドの結果の確認
エラーメッセージが出ていないことを確認する.
- インストール
端末で,次のコマンドを実行する.
sudo make install sudo /sbin/ldconfig - インストールの結果の確認
エラーメッセージが出ていないことを確認する.
- バージョン確認
端末で,次のコマンドを実行する.
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 プログラム
- Windows では python (Python ランチャーは py)
- Ubuntu では python3
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」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる