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_PATHc:/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\buildOpenCV.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

に生成されます。