OpenCV3をVisualStudio2012でビルドする

OpenCV3を使ったプログラムを書くために、必要ファイルのダウンロードからVisual Studioでのビルドまでの手順を解説します。

OpenCV3を使ったプログラムを書くために、必要ファイルのダウンロードからVisual Studioでのビルドまでの手順を解説します。
(基本的にOpenCV.jpのTips掲載の『OpenCV2.1のインストール手順』と同じですが、執筆時点ではOpenCV3およびVisual Studdio2012向けの手順は掲載がないため、参考として記載しております。)

OpenCV3のダウンロードとビルド

OpenCVのダウンロードリンクから、VERSION 3系列(執筆時点の最新は3.0 RC1)のWindows用バイナリ『OpenCV for Windows』をダウンロードします。
OpenCVのダウンロードページ

ダウンロードした自己解凍書庫形式(opencv-3.0.0-rc1.exe)を実行することで、ビルド用のソースコードが展開されます。以降は『c:/opencv3.0rc1』に展開したものとして説明します。
展開されたファイル

ソースコードをビルドするために、CMakeを使用します。Visual Studio 2012用のファイル生成に対応したCMake 2.8.10以上(執筆時点の最新は3.2.2)がない場合は公式サイトからダウンロードします。
※ダウンロードページにはCMakeのソースコードとバイナリの両方が掲載されていますので、バイナリ(cmake-3.2.2-win32-x86.exe)をインストールします。
CMakeのダウンロードページ

cmake-gui.exeを起動し、ソースコードの場所と、ビルドしたファイルの配置場所(ここでは『c:/opencv3.0rc1/works』)を指定し、ボタン『Configure』を押下します。(出力確認のダイアログに『Yes』を選択)
CMakeのパス設定

どのコンパイラ向けのプロジェクトファイルを生成するか選択できますので、使用するVisual StudioのバージョンやOSのビット数に応じて選択してください。(ここでは64bit環境でVisual Studio 2012を使用するため『Visual Studio 11 2012 Win64』を選択します。)
CMakeのプロジェクト設定

設定が終わると続いてボタン『Generate』で生成を開始します。使用しない機能はチェックを外すことでビルド時間を短縮できます。たとえばBUILD_EXAMPLESはサンプル、WITH_1394はIEEE1394機器(ステレオカメラ等)を使う場合にチェックします。よく分からない場合は、まず初期設定でビルドしてみましょう。
CMakeのConfigure結果

正常に終了した場合、出力先にVisual Studio用のソリューションファイル(C:/opencv3.0rc1/works/OpenCV.sln)が出力されます。(CMakeでの作業は以上で終了です。)

ソリューションファイルを開くことでVisual Studioが立ち上がりますので、ソリューションのビルド(F7)を実行します。この際、ソリューション構成を切り替えてDebugとReleaseの両方でそれぞれビルドを行います。
※Visual Studio 2012をインストールしていない場合はMicrosoftのダウンロードページからVisual Studio Express 2012  for Windows Desktopをダウンロードしてインストールしてください。
Visual Studioの構成マネージャー

ビルドを終えると生成先のbinフォルダ(C:/opencv3.0rc1/works/bin)にバイナリ(*.dll、*.exe、*.ilk、*.pdb)が、libフォルダ(C:/opencv3.0rc1/works/lib)にライブラリ(*.lib、*.exp)が生成されます。このうち*.dllと*.libは、OpenCVを使ったプログラムを書く際に参照する必要がありますので配置先が重要になります。
Visual StudioでのOpenCVビルド結果

Visual Studioでプロジェクト作成

Visual C++の新しいプロジェクトを作成します。ここでは説明を簡単にするため、ごく基礎的な『Win32 コンソールアプリケーション』のプロジェクトを作成します。アプリケーションの設定は『コンソールアプリケーション』、追加オプションに『空のプロジェクト』を選択します。

Visual Studioのプロジェクト追加

初期状態ではWin32(32bit)向けの設定になっていますので、64bit環境の場合は構成マネージャーからプラットフォームを編集し『x64』を作成してください。
Visual Studioの構成マネージャー
Visual Studioのプラットフォーム一覧
Visual Studioのプラットフォーム追加

OpenCVの機能を参照するためパスの設定を行います。プロジェクトのプロパティを開き、追加のインクルードディレクトリとして、ビルド用のソースコードのパス(C:/opencv3.0rc1/build/include)を設定します。パスは同じですが、構成を切り替えてDebugとReleaseそれぞれ向けに設定します。
Visual Studioのインクルードディレクトリ設定
リンカー設定からライブラリのパスを設定します。こちらはビルドした*.libがあるパスを設定します。Debug用とRelease用でフォルダが分かれていますので、構成を切り替えてそれぞれ設定します。
Visual Studioのライブラリディレクトリ設定

使用する機能に応じてライブラリをリンクさせます。構成を切り替えてDebugとReleaseそれぞれ向けに設定します。後述するサンプルではcore.hppとimgcodecs.hppをincludeしますので、ここではopencv_core300d.libとopencv_imgcodecs300d.libを記載します。なお、Debug用はopencv_core300d.lib、Release用はopencv_core300.libのようにファイル名が違いますので構成に応じ注意して設定してください。
Visual Studioのリンカー設定

簡単なプログラムで動作を確認

設定が正常に行えているか、簡単なプログラムで確認します。プロジェクトに『新しい項目を追加』(Ctrl+Shift+A)で任意のC++ファイル(.cpp)を追加してください。

以下のように記述し、ビルド(F7)を行います。ビルドできない場合は、インクルードやライブラリのパスを確認してください。

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>

int main(int argc, const char* argv[])
{
  //読み込む画像と書き出す画像のパスを設定
  cv::String source_path = "C:/source.png";
  cv::String dest_path = "C:/dest.png";

  //画像の読み込み
  cv::Mat source = cv::imread(source_path, cv::IMREAD_UNCHANGED);

  //画像の書き出し
  cv::imwrite(dest_path, source);

  return 0;
}
  • source_pathには存在する画像ファイル(BMP、JPG、PNGなど)へのパスを記述します。
  • dest_pathに指定したパスへ画像を出力しますので、書き出し可能なパスを記述します。

ビルドに成功すると、プロジェクトの出力先(プロジェクトがc:/prjならC:/prj/x64/Debugなど)に実行ファイル(*.exe)が生成されます。このまま実行してもOpenCVのDLLを読み込めない旨のエラーが表示されますので、DLLを参照できるように設定します。
DLLはビルドしたbinフォルダにDebugとRelease用に分けて出力されています(Debug用ならC:/opencv3.0rc1/works/bin/Debugなど)。このフォルダを環境変数のパスに追加するか、実行ファイルと同じフォルダへコピーすればDLLを参照できます。

DLLのコピー

基本的にincludeしたhppと類似のDLLがあれば動作しますが、関連して参照されるopencv_imgproc300.dllなども参照できる必要があります。不足したDLLがある場合は実行時のエラーでファイル名が表示されますので、適宜追加してください。

Visual Studioに戻って実行(F5)し、dest_pathにファイルが生成されていれば成功です。

以上のように、必要な機能に応じてリンカー設定とDLLへの参照を設定すれば様々なOpenCVの機能を活用したプログラムを実装できます。

関連記事