OpenCVも含めてライブラリを使うには、基本的に
- ダイナミックリンクライブラリファイル(*.dll)
- ライブラリファイル(*.lib)
- ヘッダファイル(インクルードファイル)(*.h)
の3点セットのファイルを使えるように設定するのですが、やり方はいくつかあるのですが、ここでは比較的簡単な方法を紹介します。
【関連記事】
前提条件
- Windowsの64bitOS
- Visual Studio 2013(VC12)もしくはVisual Studio 2015(VC14)
上記の環境であれば、あらかじめビルドされたOpenCVのライブラリファイルが配布されているので、これを使います。
上記環境でない場合、もしくは、標準に含まれていない機能を使いたい場合には、自分でOpenCVのライブラリをビルドする必要があるのですが、その方法については下記ページを参照下さい。
初めてのOpenCV開発 ― CMakeを使ったOpenCVのカスタマイズ【OpenCV 2.4.9】
OpenCVの入手、ダウンロード
Windows版のOepnCVは、下記ページに公開されています。
https://sourceforge.net/projects/opencvlibrary/files/opencv-win/
2016年5月現在の最新バージョンはVer.3.1.0になるので、3.1.0の部分をクリックします。
次にopencv-3.1.0.exeの部分をクリックするとファイルのダウンロードが始まります。
ダウンロードが完了するとopencv-3.1.0.exeをダブルクリックするとファイルの解凍が始まるのですが、解凍先(Extract to:)はどこでもいいのですが、ここではCドライブ直下に設定しています。
解凍が終わるとopencvというフォルダが作成されますが、慣例的にバージョンが分かるようにフォルダ名を変えておきます。(必須ではありません)
opencv
↓
opencv3.1.0
Visual Studio の設定
今回はVisual Studio 2015(VC14)の例で説明します。
再度おさらいですが、ライブラリを使用するには
- ダイナミックリンクライブラリファイル(*.dll)
- ライブラリファイル(*.lib)
- ヘッダファイル(インクルードファイル)(*.h)
の3点セットが必要になります。
*.dllファイルはプログラム実行時に必要になり、*.libと*.hのファイルはプログラミング時に必要になります。
そのため、*.libと*.hの2種類のファイルをVisual Studioで使えるように、設定が必要となります。
まずは、Visual Studio を起動し、新しいプロジェクトを作成します。
Visual C++ → Win32 → Win32コンソールアプリケーション
と選択し、プロジェクトの名前と場所を指定し、OKボタンをクリックします。
次の画面では、そのまま完了をクリック
すると、こんな↓最小限のコードが作成せれます。
これをベースにOpenCVの設定を行っていきます。
プロジェクト名の部分を右クリックし、プロパティをクリックします。
まずはヘッダファイル(インクルードファイル)(*.h)を使えるように設定を行います。
プロパティのページで、構成がすべての構成、プラットフォームがx64であることを確認して下さい。
違う場合は、それぞれすべての構成とx64を選択して下さい。
C/C++→全般と選択し、追加のインクルードディレクトリの▼マークをクリックし、<編集…>をクリックします。
ここで、OpenCVを解凍したフォルダ内のbuild\includeフォルダを選択し、フォルダーの選択をクリックします。
※ここでは最初に解凍フォルダをopencvからopencv3.1.0に名前を変更しています。
次にOKボタンをクリックします。
これで、ヘッダファイル(*.h)の設定は完了です。
次にライブラリファイル(*.lib)の設定を行います。
OpenCVの場合、ライブラリファイルの実体はOpenCVのバージョンやDebug用、Release用と異なるので注意して下さい。
OpenCV Ver.3.1.0の場合
Release用 opencv_world310.libなど
Debug用 opencv_world310d.libなど
となります。
ファイル名の310の部分はバージョン名になるので、別のバージョンを使用する場合には310の部分を読み替えて下さい。
また、古いバージョンのOpenCVでは機能ごとにlibファイルが用意されていたので、使用する機能ごとに複数のlibファイルを使用できるように設定する必要があったのですが、最近のバージョンでは、opencv_world310.libというように、いくつかの機能が一つのファイルにまとめられたので、普通の画像処理のフィルタ処理などを行いたい場合では、このファイルを使用できるように設定すればOKです。
インクルードファイル(ヘッダファイル)の時と同様に、プロジェクトのプロパティ―をクリックし、
構成がすべての構成、プラットフォーム が x64
であることを確認し
リンカー→全般→追加のライブラリディレクトリ
と選択し、<編集…>をクリックします。
ここで新しい行を選択します。
[・・・] の部分をクリック
ここで、OpenCVを解凍したフォルダ内のbuid\x64\vc14内のlibフォルダを選択し、フォルダーの選択ボタンをクリックします。
※Visual Studio 2013を使う場合はbuid\x64\vc12内のlibフォルダを選択してください。
OKボタンをクリックして、libファイルの参照先(フォルダ)の設定が完了します。
次に、実際に使用するlibファイルの参照設定を行うのですが、これはDebug用、Release用と別々に設定する必要があります。
まずは、Debug用の設定です。
構成の部分をこれまではすべての構成にしていましたが、Debugを選択します。
次に、プロパティ―ページのリンカー→入力→追加の依存ファイルの部分の▼マークをクリックします。
次に<編集…>をクリック
ここで、Debug用のlibファイル名(opencv_world310d.lib)を入力しOKボタンをクリックします。(ファイル選択ではありません。)
次にRelease用のlibファイルを設定するため、構成の部分をReleaseに切り替えます。
Debug用の時と同様に今度はRelease用のlibファイル名(opencv_world310.lib)を入力しOKボタンをクリックします。注!)ファイル名にdが付きません。
OKボタンをクリックし、適用ボタンをクリックするとVisual Studioの設定は完了です。
サンプルプログラム
新規に作成したプロジェクトに#includeの部分とmain関数内に以下のようにプログラムを書いてみます。
#include "stdafx.h"
#include <opencv2/opencv.hpp>
int main()
{
// 処理前の画像データ読込
cv::Mat src = cv::imread("C:\\temp\\Mandrill.BMP", cv::IMREAD_UNCHANGED);
// 処理後画像データ用
cv::Mat dst;
// 大津の二値化
cv::threshold(src, dst, 0, 255, cv::THRESH_OTSU);
// 処理前の画像を表示
cv::imshow("SrcImage", src);
// 処理後の画像を表示
cv::imshow("DstImage", dst);
// キー入力待ち
cv::waitKey(0);
return 0;
}
ソリューションプラットフォームがx86になっていたら、これをx64に変更します。
この状態で、プロジェクトをビルドします。
ちなみに、この状態で実行すると以下のようなメッセージが表示されます。
これはプログラム実行中に必要なダイナミックライブラリファイル(*.DLL)が見つからないためで、OpenCVの場合はPathを設定します!という説明が多いのですが、今回は手抜きなので、解凍したOpenCVのフォルダ(C:\opencv3.1.0\build\x64\vc14\bin など)内のdllファイルをコピーする事にします。
Visual Studio でx64でDebug、Releaseでビルドすると、それぞれ
(ソリューションフォルダ)\x64\Debug
(ソリューションフォルダ)\x64\Release
というフォルダができているので、解凍したOpenCVのフォルダ(C:\opencv3.1.0\build\x64\vc14\bin など)から
Debugの場合、opencv_world310d.dllのファイルを\x64\Debugのフォルダに
Releaseの場合、opencv_world310.dllのファイルを\x64\Releaseのフォルダに
コピーします。
この方法だと、Pathの設定をしないで済むので、プロジェクトごと他のPCに移植する場合などに、Pathの設定をせずに移植できるので、比較的簡単です。(OpenCVのファイルはやっぱり必要になりますが。。)
デメリットとしては、プロジェクトごとにDLLファイルをコピーするので、HDDを圧迫することになります。
と言ってもDebug,Release両方合わせても100MBぐらいなので、今どきのPCなら問題ないでしょう?!
この状態で、プログラムを実行し以下のように表示されたら、設定成功です!
トラブルシューティング
■includeファイルを開けませんと表示される
プロジェクトのプロパティで構成のプロパティ→C/C++→全般の追加のインクルードディレクトリが正しく設定されているか?確認してください。設定は構成やプラットフォームごとに設定できるようになっているので、構成がDebugやRelease、プラットフォームがx64になっているか?確認してください。
■ファイル’opencv_world310d.lib’を開くことができません。と表示される
プロジェクトのプロパティで構成のプロパティ→リンカー→全般の追加のライブラリディレクトリに正しく*.libファイルのあるディレクトリが指定されているか?確認してください。
■未解決のシンボル”XXXXX”が関数XXXXで参照されました。と表示される
これは割とよくあるエラーです。
プロジェクトのプロパティで構成のプロパティ→リンカー→入力の追加の依存ファイルに正しく*.libファイルが設定されているか?確認してください
その他
GPUの処理も試してみたい!とかいう人向けには、Build INSIDERのこの辺の記事↓
OpenCV入門
http://www.buildinsider.net/small/opencv
が参考になると思いますが、CMakeって何???という人には、まずは本記事の方法がおススメです。