Problem
OpenCVには拡張モジュールと呼ばれる標準のパッケージには含まれず、自分でビルドすることで利用可能なライブラリ群がある。
それをビルドする際、罠に嵌まったのでメモ。
Solution
基本設定
拡張モジュールはhttps://github.com/opencv/opencv_contrib/releasesから取得します。
また、拡張モジュールのビルドに本体であるOpenCVのソースが必要なので、http://opencv.org/releases.htmlからcontribと同じバージョンのソースをダウンロードします。
ダウンロードすると2つのzipが入手できますので、それを適当なフォルダに展開します。
展開先をc:\src とすると、
- c:\src\opencv_contrib-3.2.0
- doc
- modules
- samples
- …
- c:\src\oopencv-3.2.0
- 3rdparty
- apps
- …
という構成になるはずです。
CMake
CMakeのGUIを起動し、下記のテキストボックスに記載した値を入力します。
- Where is the source code
- c:\src\oopencv-3.2.0 を指定
- Where to build the binaries
- c:\src\oopencv-3.2.0\build を指定
この状態で、一度Configureを押下します。
押下すると、ダイアログでプロジェクトの形式を聞かれます。
これは拡張モジュールを利用するプロジェクトに応じて決めます。
今回はVisual Studio 14 2015 Win64を選択しました。
ラジオボタンの選択は、Use default native compilersでOKです。
選択完了後、Finishを押下します。
OPENCV_EXTRA_MODULES_PATH
Configure押下後、画面中央のリストにたくさん値が現れるので、OPENCV_EXTRA_MODULES_PATHにc:/src/opencv_contrib-3.2.0/modules を設定します。
注意するのは、**(バックスラッシュ)** ではなく /(スラッシュ) でパスを指定することです。
さもなくば、
Call Stack (most recent call first):
modules/CMakeLists.txt:7 (ocv_glob_modules)
というエラーに遭遇します。
IPP
Intel Performance Primitives が無いと
CMake Error at cmake/OpenCVFindIPP.cmake:243 (include): include could not find load file:
みたいなエラーがでます。
エラーが発生したら、WITH_IPP のチェックボックスをオフにします。
CUDA
GPUを搭載していないなら、WITH_CUDA のチェックボックスをオフにします。
さもなくば、Visual Studioでのビルド時に大量のエラーに遭遇します。
Generate
エラーが無くなったら、Configuring done と表示されるので、Generate を押下します。
すると、c:\src\oopencv-3.2.0\build に OpenCV.sln が作成されるので、Visual Studioで開きます。
ソリューションエクスプローラー から CMakeTargets\INSTALL を右クリックしてスタートアッププロジェクトに指定します。
その後、ソリューションをビルドすれば、
- dll
- c:\src\opencv-3.2.0\build\bin\Release または c:\src\opencv-3.2.0\build\bin\Debug
- lib
- c:\src\opencv-3.2.0\build\lib\Release または c:\src\opencv-3.2.0\build\lib\Debug
- header
- c:\src\opencv-3.2.0\build\install\include
に生成されます。