Skip to main content

OpenCV 4.12 をビルドする

· 4 min read
mebiusbox
engineer

WindowsでOpenCVをビルドする方法です.OpenCVをビルドする方法の解説はそこらじゅうにありますが、必要最低限のビルド構成について解説します.

OpenCVにはさまざまなモジュールがあります.今回は最低限の画像処理だけできればいいように core, imgproc, imgcodecs, videoioのみをビルドする構成にします.また、64bit版のみとします.

準備

ソースコードは OpenCV のリポジトリから取得します.今回は Contrib を使いません.また、OpenCV は4.xの最新版を取得しました.ビルドするには CMake が必要です.必要であればWinGetでインストールします.WinGetでインストールする場合はパスが追加されてませんので、必要に応じて追加します.

winget install Kitware.Cmake

ビルドには Visual Studio 2022 を使います.

プロジェクトの生成

CMakeを使ってプロジェクトを作成します.不要なモジュールとテストコードを除外します.

クローンしたディレクトリに build.x64 ディレクトリを作成し、そこに移動します.そして、次のコマンドを実行します. 必要なモジュールがあれば、削除して有効にしてください.

cmake -G "Visual Studio 17 2022" -A x64 -DBUILD_TESTS=OFF -DBUILD_PERF_TEST=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_calib3d=OFF -DBUILD_opencv_dnn=OFF -DBUILD_opencv_features2d=OFF -DBUILD_opencv_flann=OFF -DBUILD_opencv_gapi=OFF -DBUILD_opencv_highgui=OFF -DBUILD_opencv_java_bindings_generator=OFF -DBUILD_opencv_js_bindings_generator=OFF -DBUILD_opencv_ml=OFF -DBUILD_opencv_objc_bindings_generator=OFF -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_python3=OFF -DBUILD_opencv_python_bindings_generator=OFF -DBUILD_opencv_python_tests=OFF -DBUILD_opencv_stitching=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_video=OFF ..
warning

Pythonモジュールを有効にするとDebugビルド時にPythonライブラリのDebug版が求められますので注意.

正常終了すればプロジェクトファイルが作成されます.

ビルド

ALL_BUILD.vcxproj を開いて ALL_BUILD 構成でビルドします.その後、INSTALL 構成でビルドすれば build.x64\install にインストールされます. ターミナルでも CMake を使ってビルドやインストールができます.その場合は次のコマンドを実行します.

cmake --build .\ --config Debug
cmake --build .\ --config Release
cmake --install .\ --config Debug
cmake --install .\ --config Release

どちらでも構いません.個人的に何かエラーが発生した場合は、Visual Studioで確認したほうがいいので、面倒でもVisual Studioを開いてビルドすることをオススメします.

以上です.

おまけ

CMake で次のようなエラーが出る場合:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: CUDA_nppial_LIBRARY (ADVANCED) linked by target ...

OpenCV 3.x 系をビルドしようとしたらこのようなエラーが出ました.一応、対応できるらしいですが、問題なければ 4.x 系を使いましょう. (3.3.0 で確認しました.どうやら 3.4.0 から修正されているようですが、確認はしていません)