今までOpenCV 2.1でビルドしてきたプロジェクトをOpenCV 2.2に切り替えてみた.
ビルドを通すまで,変更した点が何点かあったので,そこを書いていく.

ちなみにvcprojファイルに設定を追記するGUIツールを公開したので,そちらも参照してみて下さい.

前提

  • Visual Studio 2008でビルドしたOpenCV 2.2
    • WITH_TBB
    • WITH_QT
  • の2点を有効にしてCMakeして,Visual Studio 2008でビルド.
  • (でも,多分この2点をoffにしても変わらないと思う)
  • プロジェクト本体はWindows用のコンソールプログラム
    • プロジェクト(slnに単一vcproj)
      • main.h
      • main.cpp
  • という構成

ヘッダファイル

-#include <cv.h>
-#include <cxcore.h>
-#include <highgui.h>
+#include <opencv.hpp>
  • opencv.hppで一括インクルード.
  • プログラムのサイズを小さくしたい場合は,利用する機能に応じて,ヘッダファイルを適宜取捨選択すること.
  • 今までは<cv.h>,<cxcore.h>,<highgui.h>さえインクルードしてれば,何でもできたが,2.2からはインクルードファイルがさらに細分化された
  • 面倒な人はopencv.hppだけインクルードしておけば,全部インクルードされるようになっている.
    • 【追記】 @dandelion1124さんから,コメントを頂きました.
    • opencv.hppのインクルードは将来廃止される可能性があり,推奨されてないそうです.
    • 必要なヘッダファイルを適宜includeするようにしましょう.
    • 【/追記】
  • 詳細は【OpenCV2.2】ライブラリ構成(*.lib,*.hなど) 画像処理ソリューションに機能やライブラリなどが書かれている.

ソースファイル

  • main.hをインクルードしてれば問題なし

プロジェクトファイル

  • 以下の設定変更が必要
  • ソリューションエクスプローラでプロジェクトを選択してプロジェクト(P)→プロパティ(P)
    • 「構成プロパティ」→「C/C++」→「追加のインクルードディレクトリ」にて.以下の3つを追加
    • 連続して書く場合はセミコロン(;)で区切る
      C:\OpenCV2.2\build\include\opencv;C:\OpenCV2.2\build\include\opencv2;C:\OpenCV2.2\build\include

http://tessy.org/wiki/index.php?plugin=attach&pcmd=open&refer=OpenCV2.1%A4%C82.2%A4%CB%B8%AB%A4%EB%A5%D3%A5%EB%A5%C9%CA%FD%CB%A1%A4%CE%B0%E3%A4%A4&file=settings1-c-cpp.png

  • 「構成プロパティ」→「リンカ」→「追加のライブラリディレクトリ」にて.以下のいずれかを追記
    • Debugモードの場合
      C:\OpenCV2.2\build\lib\Debug
    • Releaseモードの場合
      C:\OpenCV2.2\build\lib\Release

http://tessy.org/wiki/index.php?plugin=attach&pcmd=open&refer=OpenCV2.1%A4%C82.2%A4%CB%B8%AB%A4%EB%A5%D3%A5%EB%A5%C9%CA%FD%CB%A1%A4%CE%B0%E3%A4%A4&file=settings2-link-general.png

  • 「構成プロパティ」→「リンカ」→「追加の依存ファイル」にて.必要なライブラリを適宜追記
    • Debugモード
      opencv_core220d.lib opencv_imgproc220d.lib opencv_highgui220d.lib opencv_calib3d220d.lib
  • Releaseモード
    opencv_core220.lib opencv_imgproc220.lib opencv_highgui220.lib opencv_calib3d220.lib

http://tessy.org/wiki/index.php?plugin=attach&pcmd=open&refer=OpenCV2.1%A4%C82.2%A4%CB%B8%AB%A4%EB%A5%D3%A5%EB%A5%C9%CA%FD%CB%A1%A4%CE%B0%E3%A4%A4&file=settings3-link-input.png

  • Debugモードではdを付けたものを,Releaseモードではd無しのものを追記.*1
  • ヘッダファイル同様,ライブラリファイルも機能に応じて取捨選択する必要がある.
  • 例にしたプロジェクトではcvFindHomographyやcvConvertPointsHomogeneousを呼んでいた
  • よってopencv_calib3d220.libとリンクしたが,前述の関数達を使わないならば必要ない
  • 普通に考えて,opencv_core220とopencv_highgui220とopencv_imgproc220あたりは絶対使うんじゃないかと思う.
  • 心配ならば,全部のlibファイルを列挙すれば良い.
  • DebugとReleaseそれぞれの設定を行う.
  • 以下,vcporjファイルをdiffにかけた結果
    • DebugモードのC/C++セクション
 Name="VCCLCompilerTool"
 Optimization="0"
-AdditionalIncludeDirectories="C:\OpenCV2.1\include\opencv"
+AdditionalIncludeDirectories="C:\OpenCV2.2\include\opencv;C:\OpenCV2.2\build\include;C:\OpenCV2.2\include\opencv2"
 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
  • ReleaseモードのC/C++セクション
 Name="VCCLCompilerTool"
 Optimization="2"
 EnableIntrinsicFunctions="true"
-AdditionalIncludeDirectories="C:\OpenCV2.1\include\opencv"
+AdditionalIncludeDirectories="C:\OpenCV2.2\include\opencv;C:\OpenCV2.2\build\include;C:\OpenCV2.2\include\opencv2"
 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
  • 今までインクルードしていたディレクトリの設定を変更する必要がある.


  • Debugモードのリンカセクション
 Name="VCLinkerTool"
-AdditionalDependencies="cv210d.lib cxcore210d.lib highgui210d.lib"
+AdditionalDependencies="opencv_imgproc220d.lib opencv_core220d.lib opencv_highgui220d.lib opencv_calib3d220d.lib"
 LinkIncremental="2"
-AdditionalLibraryDirectories="C:\OpenCV2.1\build\lib\Debug"
+AdditionalLibraryDirectories="C:\OpenCV2.2\build\lib\Debug"
  • Releaseモードのリンカセクション
 Name="VCLinkerTool"
-AdditionalDependencies="cv210.lib cxcore210.lib highgui210.lib"
+AdditionalDependencies="opencv_imgproc220.lib opencv_core220.lib opencv_highgui220.lib opencv_calib3d220.lib"
 LinkIncremental="1"
-AdditionalLibraryDirectories="C:\OpenCV2.1\build\lib\Release"
+AdditionalLibraryDirectories="C:\OpenCV2.2\build\lib\Release"
  • 前述したように,適宜ライブラリファイルをインクルードする必要がある.

まとめ

  • ライブラリの形がガラッと変わったとは聞いていたが,実際に設定してみると,結構違う.
  • 初心者にとっつきにくくなったな,という印象なので,とりあえずこんな解説ページを作ってみた.
  • 今までライブラリファイルとインクルードファイルのパスはVisual Studio側*2に記載していた
  • だけど,DebugモードとReleaseモードを分けて記載できるんだから,プロジェクトのプロパティに書いた方が良いかも?
  • ここら辺は好みが分かれるところか.

参考URL:【OpenCV2.2】ライブラリ構成(*.lib,*.hなど) 画像処理ソリューション
参考tweet:http://twitter.com/#!/dandelion1124/statuses/12104214863937536

ジャンル:OpenCV:OpenCV 2.1:OpenCV 2.2


*1 ファイル名ラストについてるアルファベットは不敗神話のdだ!
*2 ツール(T)→オプション(O)→プロジェクトおよびソリューション→VC++ディレクトリ内

添付ファイル: filesettings3-link-input.png 17026件 [詳細] filesettings2-link-general.png 17161件 [詳細] filesettings1-c-cpp.png 17347件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-12-13 (火) 10:08:26 (1930d)