Setting up OpenCV C++ on Windows
Windows OS上で、OpenCVをC++言語を使用して開発するための環境設定の方法を解説します。
Webカメラの画像を取得し・表示するアプリケーションを例に、設定方法を説明します。
2. Visual Studioの設定
以降の説明はVisual Studio 2010を基準にして説明します。
他のバージョンの開発環境をお使いの場合は、適宣読み替えて下さい。
2.1 プロジェクトの作成
まずは、空のプロジェクトを作成します。
①の新しいプロジェクトをクリックするか、メニューバーからファイル>新規作成>プロジェクトを選択して下さい。
4. おわりに
これで、OpenCVをC++言語で開発するための環境設定ができました。
動作確認として、Webカメラから画像を取得しウィンドウに表示するアプリケーションを作成しました。
この取得した画像に処理を加えることで様々な用途に使用することができます。
OpenCVは高度な処理が簡単に使用できますので、色々試して見て下さい。
1. 必要なソフトウェアの準備
開発に必要なソフトウェアを準備します。
OpenCVのインストールは、ここに記載した方法で既に済んでいるものとします。
・Visual Stuido 2010 or Visutal C++ 2010
ダウンロード後インストールを行なって下さい。
OpenRTMの開発を既に行っている方はインストール済みとなっています。
未確認ですが、Visual Studio 2012でも同様に開発環境を設定できると思います。

新しいプロジェクトのダイアログが開いたら、①のWin32 コンソール アプリケーションを選択します。
次に、②の名前にcamera_test と入力します。
最後に、③のソリューションのディレクトリを作成のチェクを外し、④のOKボタンを押します。



新しい項目の追加ダイアログが立ち上がったら、①のC++ ファイルを選択し、②の名前にmainと入力します。
最後に③の追加ボタンを押します。
追加のインクルード ディレクトリ ダイアログが開いたら、①の新しい行ボタンを押します。
その中に、opencvのincludeフォルダを指定します。今回は以下のようになります。
C:\opencv2.4.6\build\include

Win 32 アプリケーション ウィザードが立ち上がったら次へを押し、アプリケーションの設定をまで進めます 。
①のコンソール アプリケーションにラジオボタンが選択サれていることを確認し、②の空のプロジェクトのチェックを入れます。
最後に、③の完了ボタンを押せばプロジェクトが作成されます。
2.2 ソースファイルの追加
処理を記述するC++ファイルをプロジェクトに追加します。

2.3 プロジェクトの設定
プロジェクトファイルの設定を行います。
①のプロジェクトファイルを右クリックし、②のプロパティを選択します。

プロパティ ページ ダイアログの左にある、C/C++プロパティをクリックします。するといくつかの項目が展開します。
その中の①の全般ノードを選択し、②の追加のインクルード ディレクトリのリストボックスをクリックし、編集を選択します。

続いて、プロパティ ページ ダイアログの左にある、リンカープロパティをクリックします。するといくつかの項目が展開します。
その中の①の全般ノードを選択し、②の追加のライブラリ ディレクトリのリストボックスを クリックし、編集を選択します。

追加のライブラリ ディレクトリ ダイアログが開いたら、①の新しい行ボタンを押します。
その中に、opencvのlibフォルダを指定します。
*各フォルダの2.4.6とうい数字はバージョンによって異なります.使用するバージョンに合わせて読み替えてください.
■32bit OSの場合
■VC9 (Visual Studio 2008 / Visual C++ 2008)
C:\opencv2.4.6\build\x86\vc9\lib
■VC10 (Visual Studio 2010 / Visual C++ 2010)
C:\opencv2.4.6\build\x86\vc10\lib
■VC11 (Visual Studio 2012 / Visual C++ 2012)
C:\opencv2.4.6\build\x86\vc11\lib
■64bit OSの場合
■VC9 (Visual Studio 2008 / Visual C++ 2008)
C:\opencv2.4.6\build\x64\vc9\lib
■VC10 (Visual Studio 2010 / Visual C++ 2010)
C:\opencv2.4.6\build\x64\vc10\lib
■VC11 (Visual Studio 2012 / Visual C++ 2012)
C:\opencv2.4.6\build\x64\vc11\lib


最後に、プロパティ ページ ダイアログの左にある、リンカープロパティをクリックします。
その中の①の入力ノードを選択し、②の追加の依存ファイルのリストボックスをクリックし、編集を選択します。
追加の依存ファイル ダイアログが開いたら、①のテキストボックスに、libファイルを追加します。
今回は以下の2つのlibファイルを追加します。必要に応じて適宣追加して下さい。
各構成の場合で追加するlibファイルが異なるので、間違えないよう気をつけて下さい。
*各libファイルの246という数字はバージョンによって異なります.使用するバージョンに合わせて読み替えてください.
■ソリューションの構成がDebugの場合
・opencv_core246d.lib
・opencv_highgui246d.lib
■ソリューションの構成がReleaseの場合
・opencv_core246.lib
・opencv_highgui246.lib

これでVisual Studioの設定は終わりです。
3. サンプルプログラムのコーディング
前章まででVisual Studioのソリューションの設定はできました。
動作確認を兼ねて、Webカメラの画像を取得してウィンドウに表示するアプリケーションを作成します。
3.1 コーディング
前章で作成したmain.cppに以下のコードを記述します。

コードの解説を行います。
-
1-3行目
必要なヘッダファイルをインクルードします。
-
5-6行目
Webカメラでキャプチャする画像のサイズをデファインします。
使用するカメラに合わせて設定して下さい。
-
9-10行目
VideoCaptureのコンストラクタを呼び、フレームのセットを行います。
-
13-16行目
Webカメラに接続できるか確認し、接続できない場合はプログラムを終了します。
-
18行目
キャプチャした画像を表示するウィンドウを設定します。
-
20-31行目
Webカメラの画像をキャプチャし、キー入力があるまで処理を続けます。
-
22-24行目
cv::Mat型という行列を扱う型を定義し、その中にWebカメラでキャプチャした画像を格納します。
キャプチャした画像を先ほど設定したウィンドウに表示させます。
-
25-29行目
キー入力を30 ms待ち、キー入力があった場合はPNG画像を保存しプログラムを終了します。
ほとんどのWebカメラは30 fpsで動作するので、ここで30 ms待ちます。
3.2 ビルド
コードが記入できたら、ビルドします。
■32bit OSの場合
①がWin32であることを確認して、メニューバーからビルド>ソリューションのビルドを選択します(F7キー)。
■64bit OSの場合
①のリストから、構成マネージャを選択します。

構成マネージャ ダイアログが立ち上がったら、①のリストから、新規作成を選択します。

新しいソリューション プラットフォーム ダイアログが立ち上がったら、
①のリストから、x64プラットフォームを選択し、②のOKを押します。
その後、構成マネージャ ダイアログの閉じるボタンを押して、ダイアログを閉じます。

3.3 プログラムの実行
メニューバーからデバッグ>デバッグ開始を選択します。
するとWebカメラから取得された画像がウィンドウに表示されます。終了するときはキーボードから適当なキーを押して下さい。
すると、画像が保存されプログラムが終了します。
これで動作確認は終了です。
-
#include <opencv2/core/core.hpp>
-
#include <opencv2/highgui/highgui.hpp>
-
#include <iostream>
-
-
#define WIDTH 640
-
#define HEIGHT 480
-
int main(int argc, char *argv[])
-
{
-
cv::VideoCapture cap(0);
-
cap.set(CV_CAP_PROP_FRAME_WIDTH, WIDTH);
-
cap.set(CV_CAP_PROP_FRAME_HEIGHT, HEIGHT);
-
-
if(!cap.isOpened())
-
{
-
return -1;
-
}
-
-
cv::namedWindow("Capture", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
-
-
while(1)
-
{
-
cv::Mat frame;
-
cap >> frame;
-
cv::imshow("Capture", frame);
-
-
if(cv::waitKey(30) >= 0)
-
{
-
cv::imwrite("frame.png", frame);
-
break;
-
}
-
}
-
}