こけめも

メモみたいなもの

OpenCV 2.2 開発環境構築メモ (Visual Studio 2010編)

Windows7端末+Visual Studio 2010 に OpenCV2.2開発環境を構築するまでの手順。
ちょっと苦労したので、メモしておきます。
Androidでも動かしたいと思っているので、できるだけシンプルな環境としたいです。

はじめに

Windows版のOpenCVを導入するには、下記のような方法があります。


このうち、インストーラー版は機能制限があったりバグがあったりするそうなので対象外。
(参照:http://kgxpx834.blog58.fc2.com/?mode=m&no=23;title)
かといってレポジトリからの最新ソースコード入手もめんどい、ということで、固められたソースを自分でビルドしてみようと思います。

手順

ソースコード取得

OpenCVSourceForge から OpenCV-2.2.0-win.zip をダウンロードします。


http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/


取得したzipファイルを任意の場所に展開します。
今回はCドライブ直下に展開することとします。
C:\OpenCV-2.2.0\3rdparty
C:\OpenCV-2.2.0\doc

といった感じです。
以後、展開したフォルダを(OpenCV)と表記します。

CMake実行

ここからライブラリをビルドするわけですが、(OpenCV)には、CMakeLists.txtとか〜cmake といったフォルダしかありません。


CMakeってなんでしょ?
Wikipediaによると…

CMakeはソフトウェアのビルドを自動化するためのクロスプラットフォームなシステムである。 UnixにおけるMakeに相当するものであり、ビルドプロセスは設定ファイルCMakeLists.txtによって完全に制御される。 最終的なソフトウェアを直接にはビルドしない点がMakeとは異なっており、 代わりに、よく使われている標準的なビルドファイル(UnixにおけるmakefileWindows Visual C++におけるプロジェクト/ワークスペースなど)を生成する。 このため、開発者は自分の使いやすい開発環境(IDEなど)から利用できる。

http://ja.wikipedia.org/wiki/CMake


つまり、「ソースコード+CMakeLists.txt」→《CMake》→「各プラットフォーム(コンパイル環境)にあったビルドファイル生成」→「好きな環境でコンパイル」ができるということのようです。


CMakeでVisualStudio2010用のslnファイルを作成してみたいと思います。
(参考:OpenCV2.0ReleaseをCMakeを使ってビルドする 画像処理ソリューション)


1.次のサイトからCMakeをダウンロード、インストールします。
CMake - Cross Platform Make


2.CMake(cmake-gui)を実行します。
3.「Where is the source code」に「(OpenCV)」(CMakeLists.txtが存在するフォルダ)、「Where to build the binaries」にOpenCVのバイナリ生成先を指定します。
ここでは「(OpenCV)\build」としておきます。


4.ソースとビルド先を設定したら、「Configure」ボタンをクリックします。ビルド先フォルダが存在しない場合はここで作成するかどうか聞かれるため作成します。
5.どのコンパイル環境用のビルドファイルを生成するか選択します。
Visual Studio 2010でビルドしたいので、「Visual Studio 10」を選択して「Finish」をクリックします。


6.しばらくすると、どのような環境で作成するかリストが表示されます。
私の環境では、デフォルト状態から「BUILD_NEW_PYTHON_SUPPORT」のチェックを外して作業を進めます。
TBBやIPPを導入している方はここでチェックを入れておいてください。
7.環境設定を終えたら、もう一度「Configue」ボタンをクリックします。
8.「Generate」ボタンをクリックします。ログ表示部分に「Generating done」と表示されれば完了です。


ソースコードビルド(Visual Studil 2010)

(OpenCV)\build に、Visual Studioのソリューションファイル(OpenCV.sln)が作成されています。
これをVisual Studio 2010で開き、「ビルド」→「バッチビルド」の順にクリックします。
開いたダイアログで、「ALL_BUILD」の「Debug」と「Release」にチェックを入れます。


チェックを入れたら「ビルド」ボタンをクリックします。
エラー出ずにビルド完了すればライブラリが完成です。
(OpenCV)\build\bin、(OpenCV)\build\lib のDebug・Releaseフォルダにライブラリが作られています。

OpenCVを組み込むための環境構築(VisualStudio)

作成したライブラリなどを利用してOpenCVプログラムをコンパイルする環境を整えましょう。


必要な作業は以下の4つです。
1.ヘッダファイルのパスを通す
2.静的ライブラリ(lib)のパスを通す
3.動的ライブラリ(dll)のパスを通す
4.リンクするライブラリを指定する。


これらを実現するために、ざっと以下のような方法が考えられます。
■パスを通す方法
1.環境変数に設定
2.プロジェクト毎に設定
3.プロパティシートに設定


■ライブラリをリンクする方法
1.ソースコードに設定
2.プロジェクト毎に設定
3.プロパティシートに設定


今回は(私の勉強のために)、Visual Studioのプロパティシートを使ってみましょう。
以下のフォイルを、バックアップとった上でエディタで開きます。

%userprofile%\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props


Microsoft.Cpp.Win32.user.propsファイルに次のように記載します。
パスは必要に応じて読み替えてください。

 


  
    C:\OpenCV-2.2.0\include;C:\OpenCV-2.2.0\modules\calib3d\include;C:\OpenCV-2.2.0\modules\core\include;C:\OpenCV-2.2.0\modules\features2d\include;C:\OpenCV-2.2.0\modules\highgui\include;C:\OpenCV-2.2.0\modules\imgproc\include;C:\OpenCV-2.2.0\modules\legacy\include;C:\OpenCV-2.2.0\modules\ml\include;C:\OpenCV-2.2.0\modules\objdetect\include;C:\OpenCV-2.2.0\modules\video\include;C:\OpenCV-2.2.0\modules\contrib\include;$(IncludePath)
    C:\OpenCV-2.2.0\build\lib\Debug;$(LibraryPath)
  
  
    
      opencv_imgproc220d.lib;opencv_core220d.lib;opencv_highgui220d.lib;%(AdditionalDependencies)
    
  
  

  
    C:\OpenCV-2.2.0\include;C:\OpenCV-2.2.0\modules\calib3d\include;C:\OpenCV-2.2.0\modules\core\include;C:\OpenCV-2.2.0\modules\features2d\include;C:\OpenCV-2.2.0\modules\highgui\include;C:\OpenCV-2.2.0\modules\imgproc\include;C:\OpenCV-2.2.0\modules\legacy\include;C:\OpenCV-2.2.0\modules\ml\include;C:\OpenCV-2.2.0\modules\objdetect\include;C:\OpenCV-2.2.0\modules\video\include;C:\OpenCV-2.2.0\modules\contrib\include;$(IncludePath)
    C:\OpenCV-2.2.0\build\lib\Release;$(LibraryPath)
  
  
    
      opencv_imgproc220.lib;opencv_core220.lib;opencv_highgui220.lib;%(AdditionalDependencies)
    
  
  



ごく簡単に解説すると、次のタグ属性でDebugビルドの設定かReleaseビルドの設定かを指定します。

<タグ Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<タグ Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">


次のタグでincludeパスを設定します。


ソースからビルドする場合、ヘッダファイルは(OpenCV)\include以外に(OpenCV)\modules\[モジュール名]\includeに存在します。


次のタグでlibパスを設定します。
ライブラリはDebug用のものとRelease用のものが生成されるので、それぞれ設定しましょう。



次のタグで、リンクするライブラリを設定します。
これもDebug用のものとRelease用のものがあるのでそれぞれ設定しましょう。



この状態でVisual Studioを起動することで「1.ヘッダファイルのパスを通す」、「2.静的ライブラリ(lib)のパスを通す」、「4.リンクするライブラリを指定する」を行うことができます。
「3.動的ライブラリ(dll)のパスを通す」については、残念ながら(?)環境変数の「Path」に「(OpenCV)\build\bin\Debug」と「(OpenCV)\build\bin\Release」を設定しています。


以上で環境構築完了です。
ヘッダファイルの指定は、次のような形で行います。

#include 


引数で指定された画像を表示するサンプル。(詳解 OpenCVより)

#include 

int main(int argc, char** argv)
{
	IplImage* img = cvLoadImage(argv[1]);
	cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);
	cvShowImage("Example1", img);
	cvWaitKey(0);
	cvReleaseImage(&img);
	cvDestroyWindow("Example1");
}