読者です 読者をやめる 読者になる 読者になる

OpenCV2.4.3をWindowsでビルド

opencv

このエントリーをはてなブックマークに追加

  • OpenCV2.4.3をWindowsでビルド。ただ使うだけならOpenCVインストーラを展開するだけでいいのだが、今回はOpenCLIntel TBBを動かせるようにするためにビルドを試みた。ハマりどころが多くあるので一筋縄で行かなかった。
  • 以下は64ビット版のDLLをVisual Studioでビルドできるようになるまでのメモ。OpenCLIntel TBBは要らないという人は該当部分は読み飛ばしてください。

準備

手順

  • OpenCV-2.4.3.exeを実行
    • 適当なディレクトリを選んで解凍する。C:\と入力してExtractをクリックすると、C:\直下にopencvフォルダができる
  • cmake-guiを実行
    • 初期設定
      • "Where is the source code: "に解凍したOpenCVのディレクトリのパスを入力(今回はC:/opencv)
      • "Where to build the binaries: "にビルド用のソリューションファイルを作るディレクトリのパスを入力(C:/opencv/mybuild)
      • Configureをクリック
      • "Build directory does not exist, should I create it?"と訊かれるのでYesをクリック
      • ツールを選択。ここではVisual Studio 11 Win64を選択してFinishをクリック
      • もう一度Configureをクリック
    • OpenCLの設定
      • 事前にOpenCL関連のSDKを入れていると、自動的にWITH_OPENCLにチェックが付いているので設定不要
    • TBBの設定
      • WITH_TBBにチェックを入れてConfigureをクリック
      • TBB-INCLUDE_DIRSという項目が出現。値が"TBB_INCLUDE_DIRS-NOTFOUND"になっているはず。この値をC:\lib\tbb41_20121003oss\includeに変更してConfigureをクリック
      • TBB_LIB_DIRという項目と、TBB_STDDEF_PATHという項目とが新たに出現。今回の場合は勝手に値が入っていた。そのままConfigureをクリック

この時点でこんな感じ。なお、Search欄に"TBB"と入力しているために、TBB関連の項目のみが表示されている。

    • ソリューションファイルの作成
      • "CUDA_TOOLKIT_ROOT_DIR not found or specified"というエラーが出ているようだが、無視してGenerateボタンをクリック。C:\opencv\mybuildにOpenCV.slnができれば成功。
  • ビルド
    • 生成されたOpenCV.slnをクリックしてVisual Studioを開き、Ctrl+Shift+Bでビルド開始。しばらく待てばビルド終了。

はまったところその1

ここからは、私がビルドに試行錯誤しているときに出会ったハマりどころの紹介。

最初、OpenCVの展開先のパスの中に'['と']'という文字が入っていた時(C:\somewhere\[library]\opencvみたいな感じでopencvを展開していた)、以下のようなエラーが出て一部のライブラリがビルドできなくてハマった。同じエラーが出る場合は、できるだけシンプルなパスにOpenCVを解答しなおしてやり直すことをお勧めする。

You have called ADD_LIBRARY for library libjpeg without any source files. This typically indicates a problem with your CMakeLists.txt file
You have called ADD_LIBRARY for library libjasper without any source files. This typically indicates a problem with your CMakeLists.txt file
You have called ADD_LIBRARY for library libpng without any source files. This typically indicates a problem with your CMakeLists.txt file

はまったところその2

TBB-INCLUDE_DIRSの欄に間違ってC:\lib\tbb41_20121003oss\include\tbbと入力してConfigureをクリックしたところ、TBB_STDDEF_PATHがTBB_STDDEF_PATH-NOTFOUNDのままとなり自動設定されなかった。その後手でパス修正しようとしたが、パスのデリミタは円マークではなくスラッシュではなければエラーとなってしまうのに気づかず時間がとられた。

参考までに、パスのデリミタを間違えたときのエラーを下記にコピーしておく。

CMake Error at cmake/OpenCVUtils.cmake:445 (if):
  Syntax error in cmake code at

    c:/opencv/cmake/OpenCVUtils.cmake:445

  when parsing string

    C:\lib\tbb41_20121003oss\include\tbb\tbb_stddef.h

  Invalid escape sequence \l
Call Stack (most recent call first):
  cmake/OpenCVDetectTBB.cmake:85 (ocv_parse_header)
  cmake/OpenCVFindLibsPerf.cmake:7 (include)
  CMakeLists.txt:379 (include)

参考