OpenCV入門【3.0対応】(4)

OpenCV入門【3.0対応】(4)

初めてのOpenCV開発 ― Visual Studio/CMake/NuGetでプロジェクト作成【OpenCV 3.0/3.1】

2016年6月1日 改訂(2016/06/27 更新、更新履歴は本ページ末尾)

OpenCVを使ったアプリケーションのプロジェクト作成方法として、「Visual Studio」「CMake」「NuGet」の3つの方法を解説する。

@dandelion1124(http://atinfinity.github.io/
  • このエントリーをはてなブックマークに追加

1. OpenCVを使ったアプリケーションのプロジェクト作成方法

1.1 はじめに

 前回、OpenCV 3.0/3.1の環境構築について解説を行いました。今回はOpenCVを使ったアプリケーションのプロジェクト作成方法について解説します。また、以降の説明は、前回の記事のいずれかの方法でOpenCV 3.0/3.1の環境構築が終わっているものとして解説を行います。

1.2 プロジェクト作成方法

 OpenCVを使ったアプリケーション開発を「Windows環境」かつ「Visual Studio」で行うための主なプロジェクト作成方法は以下の3つです。

 また、プロジェクト作成方法によって、インクルードパスやライブラリパスの設定を開発者が明示的に行う必要があるかが変わります。以下の表に作成方法ごとの設定についてまとめます。

プロジェクト作成方法 インクルードパス、ライブラリパスの設定
Visual Studioによる新規プロジェクト作成 手動
CMakeによるプロジェクト作成 自動
NuGetを使ったパッケージインストール 自動
作成方法ごとの設定

 以降は、各環境構築方法の詳細について述べていきます。また、筆者が確認した環境は以下の通りです。

項目 内容
OpenCVバージョン OpenCV 3.1
Visual Studio Visual Studio 2013 Update5
ビルド構成 x64 Release
OS Windows 10 Pro(64bit)
筆者が確認した環境

編集部注:Visual Studio 2015でも試し、本稿の手順がほぼそのまま適用できることを確認しています。違いとして、Visual Studio 2015では2.2の手順は不要です。それ以外の違いは、適宜、説明の中で注記を加えます。

▲【プロジェクト作成方法の一覧】に戻る

2. Visual Studioによる新規プロジェクト作成

2.1 新規プロジェクト作成

 以下の手順で作成します。

図1 メニューバーの[ファイル]-[新規作成]-[プロジェクト]を選択して、新規プロジェクトを作成します
図1 メニューバーの[ファイル]-[新規作成]-[プロジェクト]を選択して、新規プロジェクトを作成します
図2 「Win32コンソールアプリケーション」テンプレートを選択して、新規プロジェクトを作成します
図3 [アプリケーションの設定]を選択し、[空のプロジェクト]にチェックを入れて、[完了]ボタンを押します

2.2 新規プロジェクト作成(64bitアプリケーションの場合)

 「2.1 新規プロジェクト作成」では32bitアプリケーション用のプロジェクトが生成されます。

 64bitアプリケーションを作成する場合には、さらに以降の手順を踏む必要があります。

図4 [ビルド]-[構成マネージャー]を選択します
図4 [ビルド]-[構成マネージャー]を選択します
図5 [構成マネージャー]ダイアログの[プラットフォーム]から「<新規作成...>」を選択します
図6 [新しいプロジェクト プラットフォーム]ダイアログで[新しいプラットフォーム]を「x64」、[設定のコピー元]を「Win32」にして、[OK]ボタンを押します
図6 [新しいプロジェクト プラットフォーム]ダイアログで[新しいプラットフォーム]を「x64」、[設定のコピー元]を「Win32」にして、[OK]ボタンを押します

2.3 インクルードパス設定

 プロジェクトからOpenCVのヘッダーを参照するためには、OpenCVヘッダー格納パスをインクルードパスとして設定する必要があります。以下がその設定手順です。

図7 メニューバーから[プロジェクト]-[プロパティ]を選択します
図7 メニューバーから[プロジェクト]-[プロパティ]を選択します
図8 ReleaseとDebugで共通の設定なので、まずは左側のツリーから[構成プロパティ]-[C/C++]-[全般]を選択した上で、[構成]を「すべての構成」にします。次に中央の[追加のインクルード ディレクトリ]にOpenCVのインクルードパスを設定し、最後に[OK]ボタンを押します

編集部注: Visual Studio 2015では、いったん仮のソースファイルなどを追加しないと[追加のインクルード ディレクトリ]が表示されないようです。

2.4 ライブラリパス設定

 プロジェクトからOpenCVのライブラリを参照するためには、OpenCVのライブラリ格納パスをライブラリパスとして設定する必要があります。設定方法は、先ほどのインクルードパス設定とほぼ同じです。

図9 メニューバーから[プロジェクト]-[プロパティ]を選択します
図9 メニューバーから[プロジェクト]-[プロパティ]を選択します
図10 ReleaseとDebugで共通の設定なので、[構成]を「すべての構成」にします。また、[構成プロパティ]-[リンカー]-[全般]-[追加のライブラリ ディレクトリ]にOpenCVのライブラリパスを設定し、[OK]ボタンを押します

編集部注: Visual Studio 2015では、ツリーから[構成プロパティ]-[VC++ ディレクトリ]を選択して、[ライブラリ ディレクトリ]に「C:\dev\opencv-3.1.0 \build\install\x64\vc14\lib」のようなパスを書き加える。

2.5 ライブラリのリンク設定

 OpenCVの関数を用いるには、その関数が含まれるOpenCVモジュールのライブラリをリンクする必要があります。ここではライブラリのリンク方法について説明します。

2.5.1 サンプルプログラムで用いるライブラリ

 今回のサンプルプログラムで用いるモジュール(core、highgui)の概要は以下の通りです※2016/06/27追記: なお、CMakeでインストールした場合と公式パッケージでインストールした場合で、モジュール名が異なっています。まずは「CMakeの場合」を説明します)。

モジュール名 概要
core 画像・行列データ構造の提供、配列操作、基本図形描画、XMLおよびYAML入出力、コマンドラインパーサー、ユーティリティ機能など
highgui GUI機能(ウィンドウ表示、キーボード入力/マウス操作受け付けなど)
モジュール(core、highgui)の概要

 また、OpenCV 3.1におけるこれらのモジュールのライブラリ名をまとめたものが以下の表です。Release版とDebug版でファイル名が異なる点にご注意ください。具体的には、Debug版はファイル名に“d”が付与されています。

モジュール名 ライブラリ名(Release版) ライブラリ名(Debug版)
core opencv_core310.lib opencv_core310d.lib
highgui opencv_highgui310.lib opencv_highgui310d.lib
各モジュールのライブラリ名

 一方で、OpenCV 3.1「公式パッケージ」に同梱されているOpenCVライブラリは、worldモジュールとして1つにまとめられているため、公式パッケージを用いる場合はworldモジュールのライブラリをリンクする必要があります。OpenCV 3.1(公式パッケージ)におけるライブラリ名をまとめたものが以下の表です(※2016/06/27追記)

モジュール名 ライブラリ名(Release版) ライブラリ名(Debug版)
world opencv_world310.lib opencv_world310d.lib
各モジュールのライブラリ名(公式パッケージ)

 このようにプロジェクトのReleaseビルド、Debugビルドそれぞれでリンクするライブラリが異なるため、構成ごとに設定方法を説明します(2.5.2でReleaseビルド用の設定、2.5.3でDebugビルド用の設定について説明します)。

2.5.2 ライブラリのリンク設定(Releaseビルド)

 ここでも、先ほどと同じプロジェクトプロパティのダイアログで以下のように設定します

図11 [構成プロパティ]-[リンカー]-[入力]-[追加の依存ファイル]の[▼]ボタンを押し、「<編集...>]を選択します
図12 [追加の依存ファイル]ダイアログで、追加したいライブラリ名(この例では「opencv_core310.lib」と「opencv_highgui310.lib」)を入力して、[OK]ボタンを押します
図12 [追加の依存ファイル]ダイアログで、追加したいライブラリ名(この例では「opencv_core310.lib」と「opencv_highgui310.lib」=CMakeでインストールした場合。※2016/06/27追記:OpenCV公式パッケージを用いる場合は、「opencv_world310.lib」)を入力して、[OK]ボタンを押します
2.5.3 ライブラリのリンク設定(Debugビルド)
図13 [構成プロパティ]-[リンカー]-[入力]-[追加の依存ファイル]の[▼]ボタンを押し、「<編集...>」を選択します
図14 [追加の依存ファイル]ダイアログで、追加したいライブラリ名(この例では「opencv_core310d.lib」と「opencv_highgui310d.lib」)を入力して、[OK]ボタンを押します
図14 [追加の依存ファイル]ダイアログで、追加したいライブラリ名(この例では「opencv_core310d.lib」と「opencv_highgui310d.lib」=CMakeでインストールした場合。※2016/06/27追記:OpenCV公式パッケージを用いる場合は、「opencv_world310d.lib」)を入力して、[OK]ボタンを押します

2.6 プロパティシート(.propsファイル)を用いた設定方法

 プロジェクト作成ごとに「2.3 インクルードパス設定」「2.4 ライブラリパス設定」「2.5 ライブラリ設定」を手動で行うのが面倒な方は、あらかじめ作成しておいたプロパティシート(.propsファイル)をインポートすることで、これらの設定を容易に行うことができます。

2.6.1 プロパティシートの入手

 筆者がGitHub上にOpenCVを使うためのプロパティシートを公開していますので、皆さんの開発環境に応じて必要なプロパティシートを取得してください。プロパティシート取得後、このプロパティシートを適当な場所に格納します。以下の例では、先ほど作成したプロジェクトの.vcxprojファイルがあるディレクトリ内にプロパティシートを格納しています。

2.6.2 プロパティシートのインポート

 プロジェクトに対してプロパティシートをインポートする方法について説明します。以下の例では、「2.6.1 プロパティシートの入手」で入手したVisual Studio 2010/2012/2013/2015用のプロパティシート(opencv310.props)をインポートしています。

図15 [プロパティ マネージャー]ウィンドウを開いた後、プロジェクトを右クリックして、[既存のプロパティシートの追加]を選択します

図15 [プロパティ マネージャー]ウィンドウを開いた後、プロジェクトを右クリックして、[既存のプロパティシートの追加]を選択します

1で[プロパティ マネージャー]タブがない場合は、メニューバーの[表示]-[その他のウィンドウ]-[プロパティ マネージャー]を実行してください。

図16 あらかじめ用意したプロパティシート(この例では「opencv310.props」)を選択して、[開く]ボタンを押します

2.7 ソースファイルの追加

 プロジェクトに対してソースファイルを追加します。

図17 [ソリューション エクスプローラー]で[ソース ファイル]グループを右クリックして、[追加]-[新しい項目]を選択します
図18 [新しい項目の追加]ダイアログで[Visual C++]-[C++ ファイル]テンプレートを選択し、[名前]にソースコードのファイル名(この例では「main.cpp」)を入力してから、[追加]ボタンを押します

 ここでは「5.1 サンプルコード」にあるmain.cppファイルを用いて動作確認を行います。

 ビルド、実行して「5.2 実行結果」にあるような結果が得られれば正しくプロジェクトが作成できています。

▲【プロジェクト作成方法の一覧】に戻る

3. CMakeによるプロジェクト作成

 ここではCMakeを用いてVisual Studioのプロジェクトファイルを簡単に生成する方法について紹介します。そのため、事前に前回の記事を参考にして、CMakeをインストールしておく必要があります。コマンドプロンプトで実行したい場合には環境変数の設定も行っておいてください。

3.1 CMake設定ファイル作成

 CMakeを使ってプロジェクト作成を行うためには、CMake設定ファイル(CMakeLists.txt)を用意しておく必要があります。以下に設定ファイルのサンプルを記載します。

CMake
# CMakeの最低バージョンを記述
cmake_minimum_required(VERSION 2.8)
# ソリューション名を指定
project(SampleSolution)
# 実行ファイル名とソース指定
add_executable(SampleProject main.cpp)

# OpenCVインストールパスを指定
set(OpenCV_DIR "C:/dev/opencv-3.1.0/build/install")
# OpenCVのパッケージを探す
find_package(OpenCV REQUIRED)
# OpenCVが見つかった場合のみ設定を行う
if(OpenCV_FOUND)
# インクルードパスを指定
include_directories(${OpenCV_INCLUDE_DIRS})
# リンクするライブラリ指定
target_link_libraries(SampleProject ${OpenCV_LIBS})
endif(OpenCV_FOUND)
CMake設定ファイル(CMakeLists.txt)

 上記の設定ファイルにある各設定の意味を、次の表で説明します。必要に応じてご自身の環境に応じてカスタマイズしてください。

設定 内容
project(solutionName) ソリューション名を指定。上記の例では「SampleSolution」としている
add_executable(projectName sourceFileName) プロジェクト名とソースファイルを指定。上記の例ではプロジェクト名を「SampleProject」、ソースファイルを「main.cpp」としている
set(OpenCV_DIR OpenCV_Path) OpenCVをインストールしたパスの環境変数(OpenCV_DIR)を設定。上記の例では「C:/dev/opencv-3.1.0/build/install」を指定
CMake設定ファイルにおける各設定の意味

 また、ここでは作成したCMakeLists.txtファイルと同一階層に「5.1 サンプルコード」にあるmain.cppファイルを作成しておきます。

3.2 プロジェクトファイル生成(GUI)

 まず、前回の記事でインストールしたcmake-gui.exeを起動します。その後、以下の手順を踏むことでOpenCVを使ったアプリケーションのプロジェクトを生成できます。

図19 「cmake-gui.exe」ファイルを実行し、所定のパスを設定した後、[Configure]ボタンを押します
図20 [Yes]ボタンを押して処理を続行します
図20 [Yes]ボタンを押して処理を続行します
図21 コンパイラーを指定して、[Finish]ボタンを押します
図21 コンパイラーを指定して、[Finish]ボタンを押します
図22 「Generate」ボタンを押すことでソリューションファイルが生成されます

 これらの一連の作業を行うと、図19の2で指定したディレクトリ内にソリューションファイルが生成されます。

3.3 プロジェクトファイル生成(CUI)

 「3.2 プロジェクトファイル生成(GUI)」ではGUIを用いてプロジェクトファイル生成しましたが、生成するたびにGUI操作が発生してしまいます。そのため、これらの操作を自動化するためにCUIで行いたい場合もあると思います。3.3ではコマンドプロンプトからCMakeを使ってプロジェクトファイルを生成する方法について解説します。

 コマンドプロンプトからCMakeを使ってプロジェクトファイルを生成する手順は以下の通りです。

  1. コマンドプロンプトを開き、ソースコードのあるディレクトリに移動する。
  2. 以下のバッチファイルを作成して、ソースコードのあるディレクトリに配置し、バッチファイルを実行する。

 また、以下のバッチファイルはVisual Studio 2013向けになっていますが、Visual Studio 2015で使いたい場合は、以下のバッチファイルで「Visual Studio 12」となっているところを「Visual Studio 14」に書き換える必要があります。

Batchfile
:: カレントパスをSOURCE_DIRにセット
set SOURCE_DIR=%~dp0

:: buildディレクトリをSOURCE_DIRにセット
set BUILD_DIR=%SOURCE_DIR%\build

:: ビルド構成(コンパイラー、アーキテクチャ)を指定
set GENERATOR_NAME=Visual Studio 12 Win64

mkdir build
cd build

:: CMakeによるプロジェクト生成
cmake.exe ^
-G"%GENERATOR_NAME%" ^
--build "%BUILD_DIR%" ^
-D CMAKE_CONFIGURATION_TYPES="Debug;Release" ^
%SOURCE_DIR%
プロジェクトファイルを生成するためのバッチファイル(cmake_gen_proj.bat)

 これらの一連の作業を行うと、buildディレクトリ内にソリューションファイルが生成されます。

▲【プロジェクト作成方法の一覧】に戻る

4. NuGetを使ったパッケージインストール

4.1 新規プロジェクト作成

 まずは新規Visual Studioプロジェクトを作成します。作成方法は、前述の「2.1 新規プロジェクト作成」を参考にしてください。

4.2 NuGetを使ったパッケージインストール

 プロジェクトを作成できたら次に、NuGetを使ってOpenCVパッケージをインストールします。インストール方法は、以下の画面を参考にしてください。

図23 [ソリューション エクスプローラー]のプロジェクト項目を右クリックして、表示されるコンテキストメニューから[NuGet パッケージの管理]を選択します
図23 [ソリューション エクスプローラー]のプロジェクト項目を右クリックして、表示されるコンテキストメニューから[NuGet パッケージの管理]を選択します
図24 OpenCVパッケージを検索して、インストールします

 これでプロジェクトに対するOpenCVパッケージ設定は完了です。なお、パッケージの実体は、ソリューションファイルと同一階層のpackagesディレクトリに格納されます。

 また、記事執筆時点(2016/5/22現在)で図24にある「OpenCV 3.1」のNuGetパッケージはコンフィグレーションによっては正常に動作しないようです(今後、修正される可能性があります)。

4.3 ソースファイルの追加

 作成したプロジェクトに対してソースファイルを追加します(詳細は「2.7 ソースファイルの追加」を参照ください)。ここでは「5.1 サンプルコード」にあるmain.cppを用いて動作確認を行います。ビルド、実行して「5.2 実行結果」にあるような結果が得られれば正しくプロジェクトが作成できています。

▲【プロジェクト作成方法の一覧】に戻る

5. サンプルプログラム実行

 今回の記事で用いるサンプルプログラムおよび実行結果を示します。処理内容としては、画像データの生成と、画像のウィンドウ表示となります。

5.1 サンプルコード

C++
#include <opencv2/core.hpp>    // coreモジュールのヘッダーをインクルード
#include <opencv2/highgui.hpp> // highguiモジュールのヘッダーをインクルード
#include <iostream>

int main(int argc, const char* argv[])
{
// 1幅320px、高さ240pxで赤色の画像データを生成
cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));

// 2画像表示用のウィンドウを生成
cv::namedWindow("red", cv::WINDOW_AUTOSIZE);

// 3ウィンドウに画像を表示
cv::imshow("red", redImg);

// 4キー入力を待機
cv::waitKey(0);

// 5作成したウィンドウを全て破棄
cv::destroyAllWindows();

return 0;
}
サンプルプログラム(main.cpp)

 次回詳細に説明しますが、1の画像データ生成APIはcoreモジュール、25のGUI関連APIはhighguiモジュールで提供されています。そのため、このサンプルではcoreモジュール、highguiモジュールのヘッダーインクルード、ライブラリのリンクを行っています。

5.2 実行結果

 「5.1 サンプルコード」のソースコードを含むプロジェクトをビルド、実行すると、以下の画面ような赤色で塗りつぶされたウィンドウが表示されます。このウィンドウに対してキー入力を行うとウィンドウが閉じ、プログラムが終了すれば、OpenCVアプリケーションのプロジェクトが正しく生成できていることが分かります。

図25 サンプルコードの実行結果
図25 サンプルコードの実行結果

6. おわりに

 今回は、以下の3ケースのプロジェクト作成方法を紹介しました。

  • Visual Studioによる新規プロジェクト作成
  • CMakeによるプロジェクト作成
  • NuGetを使ったパッケージインストール

 次回以降、OpenCVのモジュールのうち、coreモジュール、highguiモジュールの機能について例を用いながら解説します。

更新履歴

2014/08/29
初版を公開しました。
2016/06/01
改訂。第2版を公開しました。
2016/06/27
更新。公式パッケージを使う場合、リンクするライブラリ名が異なるため、その内容を追記しました。

※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

1. OpenCVとは? 最新3.0の新機能概要とモジュール構成

オープンソースのコンピューター・ビジョン・ライブラリ「OpenCV」 3.0のリリースに合わせて連載再始動! 今回はOpenCVの概要と基本機能を紹介する。ベータ→正式版に合わせて改訂。

2. OpenCV 3.0の新機能(+ 次バージョンのロードマップ)

2015年6月に大望のOpenCVのメジャーバージョンアップ「3.0」が登場した。この新バージョンの新機能をモジュールごとに説明し、次バージョン3.1のロードマップを簡単に紹介する。

3. OpenCVの環境構築(OpenCV 3.0/3.1)

OpenCV 3環境の構築方法として、「公式パッケージを使ったインストール」「CMakeを使ったライブラリのビルド」「NuGetを使ったパッケージインストール」の3ケースを解説。バージョン2.4.9から3.0/3.1に合わせて改訂。

4. 【現在、表示中】≫ 初めてのOpenCV開発 ― Visual Studio/CMake/NuGetでプロジェクト作成【OpenCV 3.0/3.1】

OpenCVを使ったアプリケーションのプロジェクト作成方法として、「Visual Studio」「CMake」「NuGet」の3つの方法を解説する。

5. 初めてのOpenCV開発 ― coreモジュール【OpenCV 3.1.0】

OpenCVのcoreモジュールの概要を解説。そのMatクラスを使って画像データを扱う方法や、ユーティリティ関数、OpenCV 3.0より導入されたUMatクラスを紹介する。

Twitterでつぶやこう!


Build Insider賛同企業・団体

Build Insiderは、以下の企業・団体の支援を受けて活動しています(募集概要)。

ゴールドレベル

  • 日本マイクロソフト株式会社
  • グレープシティ株式会社