OpenCV 2.4.10をVisual C++で使用する環境を整える

icon 項目のみ表示/展開表示の切り替え

概要

OpenCVは画像処理ライブラリである。
Visual C++ でコンパイルおよび実行するために必要な作業について述べる。

テスト環境

コンパイラ

Visual C++ 2008 Express(32bit)/Standard(32/64bit) with OpenCV2.3.1
Visual C++ 2013 Express 32bit/64bit with OpenCV2.4.10

実行環境

Windows 7 32/64bit

OpenCV 2.4.10の環境設定

2014/10/02 367.3MB
このバージョンは、Visual C++ 2010/2012/1013で使用可能です。
コンパイル済みのLIBやDLLファイルがあるので簡単に使用できます。

ダウンロード

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

Download opencv-2.4.10.exe (367.3 MB) をクリックします。

解凍

ダウンロードしたファイルを実行します。

ファイルを解凍する場所(フォルダー名)を聞いてくるので、C:\opencv2.4.10と入力しExtractをクリックします。
フォルダー名は、後でライブラリファイルのフォルダーをopencvのバージョンやデバック/リリース・32/64bit・動的リンク/静的リンクに合わせてC++のマクロにより自動的に選択させるために、この様にバージョン番号を含んだフォルダー名を指定します。 解凍すると3.75GBとなります。

インクルードパスの設定

OpenCvを使用したプログラムのコンパイルには、opencvのヘッダーファイルの場所を指定してやる必要があります。
プロジェクトのプロパティページ・構成プロパティ・VC++ディレクト・インクルードディレクトリを修正します。
C:\opencv2.4.10\opencv\build\include
%include%;$(VC_IncludePath);$(WindowsSDK_IncludePath);
ここでは、環境変数INCLUDEを参照するようにしています。環境変数を介すことによりデバック/リリース・32/64bitの変更を行ってもバージョン番号の変更は環境変数のみで対応できます。

ライブラリパスの設定

リンクには、opencvの関数の場所または実態を示したLIBファイルが必要です。
デバック/リリース・32/64bit・動的リンク/静的リンクにより以下のように参照するフォルダーが変わります。
C:\OPENCV2.4.10\OPENCV\BUILD\X86
├─vc10
│  ├─lib        Visual C++ 2010 32bit 動的リンクライブラリ
│  └─staticlib  Visual C++ 2010 32bit 静的リンクライブラリ
├─vc11
│  ├─lib        Visual C++ 2012 32bit 動的リンクライブラリ
│  └─staticlib  Visual C++ 2012 32bit 静的リンクライブラリ
└─vc12
    ├─lib       Visual C++ 2013 32bit 動的リンクライブラリ
    └─staticlib Visual C++ 2012 32bit 静的リンクライブラリ
C:\OPENCV2.4.10\OPENCV\BUILD\X64
├─vc10
│  ├─lib        Visual C++ 2010 64bit 動的リンクライブラリ
│  └─staticlib  Visual C++ 2010 64bit 静的リンクライブラリ
├─vc11
│  ├─lib        Visual C++ 2012 64bit 動的リンクライブラリ
│  └─staticlib  Visual C++ 2012 64bit 静的リンクライブラリ
└─vc12
    ├─lib       Visual C++ 2013 64bit 動的リンクライブラリ
    └─staticlib Visual C++ 2012 64bit 静的リンクライブラリ
動的リンク/静的リンクを切り替えて使用しなければ、プロジェクトのプロパティページ・構成プロパティ・VC++ディレクト・ライブラリディレクトリに記述すれば参照可能ですが、面倒なので、C++のマクロにより切り替えることとしました。
ビルド時の状態によりマクロが以下のように変わります。
また、デバック版の場合は、ファイル名にdが付加されます。
_DLL 動的リンクを指定している場合に定義される。
_WIN64 64bitの実行ファイルを作成する場合に定義される。
_DEBUG デバックを指定している場合に定義される
_MSV_VER Visual C++のバージョンを示す。
  1500 Visual C++ 2008
  1600 Visual C++ 2010
  1700 Visual C++ 2012
  1800 Visual C++ 2013
CVAUX_STR(CV_MAJOR_VERSION) OpenCVのメジャーバージョンを示す。 2.4.10の場合2
CVAUX_STR(CV_MINOR_VERSION) OpenCVのマイナーバージョンを示す。 2.4.10の場合4
CVAUX_STR(CV_SUBMINOR_VERSION)  OpenCVのサブマイナーバージョンを示す。 2.4.10の場合10
ライブラリファイルはC++のソースコード上で#pragma comment(lib,"LIBファイル名")で指定できるので、これらのマクロを駆使しLIBファイル名を作成する。

実行時のパス

動的リンクでビルドした場合は、実行時に以下のフォルダーのdllファイルを参照する。
正常に動作させるには、環境変数PATHに以下のパスを通す必要がある。32/64bitで参照するdllファイルは同じ名前なので、ビルドしたファイルに合わせて環境変数を切り替える必要がある。
32/64bitで両方ビルドするには、先にソリューションを作成しておいてから、同じフォルダーに以下のバッチファイルを作成する。
test.slnはソリューションのファイル名に合わせて修正する必要がある。
C:\OPENCV2.4.10\OPENCV\BUILD\X86
├─vc10
│  └─bin
├─vc11
│  └─bin
└─vc12
    └─bin
C:\OPENCV2.4.10\OPENCV\BUILD\X64
├─vc10
│  └─bin
├─vc11
│  └─bin
└─vc12
    └─bin

32bit

set path_tmp=%path%
path=C:\opencv2.4.10\opencv\build\x86\vc12\bin;%path%
set include_tmp=%include%
set include=C:\opencv2.4.10\opencv\build\include;%include%
start /wait test.sln

64bit

set path_tmp=%path%
path=C:\opencv2.4.10\opencv\build\x64\vc12\bin;%path%
set include_tmp=%include%
set include=C:\opencv2.4.10\opencv\build\include;%include%
start /wait test.sln