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

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

#contents

*前提 [#pd5a1df3]
-Visual Studio 2008でビルドしたOpenCV 2.2
--WITH_TBB
--WITH_QT
-の2点を有効にしてCMakeして,Visual Studio 2008でビルド.
-(でも,多分この2点をoffにしても変わらないと思う)
-プロジェクト本体はWindows用のコンソールプログラム
--プロジェクト(slnに単一vcproj)
---main.h
---main.cpp
-という構成
*ヘッダファイル [#v6e063cb]
 -#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>http://twitter.com/dandelion1124]]さんから,[[コメント>http://twitter.com/#!/dandelion1124/statuses/12104214863937536]]を頂きました.
--opencv.hppのインクルードは将来廃止される可能性があり,推奨されてないそうです.
--必要なヘッダファイルを適宜includeするようにしましょう.
--【/追記】
-詳細は[[【OpenCV2.2】ライブラリ構成(*.lib,*.hなど) 画像処理ソリューション>http://imagingsolution.blog107.fc2.com/blog-entry-275.html]]に機能やライブラリなどが書かれている.

*ソースファイル [#h9aa92d9]
-main.hをインクルードしてれば問題なし

*プロジェクトファイル [#eec402dd]
-以下の設定変更が必要
-ソリューションエクスプローラでプロジェクトを選択してプロジェクト(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無しのものを追記.((ファイル名ラストについてるアルファベットは不敗神話のdだ!))
--ヘッダファイル同様,ライブラリファイルも機能に応じて取捨選択する必要がある.
--例にしたプロジェクトでは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"
--前述したように,適宜ライブラリファイルをインクルードする必要がある.

*まとめ [#pf81f428]
-ライブラリの形がガラッと変わったとは聞いていたが,実際に設定してみると,結構違う.
-初心者にとっつきにくくなったな,という印象なので,とりあえずこんな解説ページを作ってみた.
-今までライブラリファイルとインクルードファイルのパスはVisual Studio側((ツール(T)→オプション(O)→プロジェクトおよびソリューション→VC++ディレクトリ内))に記載していた
-だけど,DebugモードとReleaseモードを分けて記載できるんだから,プロジェクトのプロパティに書いた方が良いかも?
-ここら辺は好みが分かれるところか.

参考URL:[[【OpenCV2.2】ライブラリ構成(*.lib,*.hなど) 画像処理ソリューション>http://imagingsolution.blog107.fc2.com/blog-entry-275.html]]~
参考tweet:http://twitter.com/#!/dandelion1124/statuses/12104214863937536

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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS