知能情報学実験及び演習(田中)

Visual C++によるプログラミングとOpenCV

 

 

Visual C++によるプログラミング

(1)   ファイルからの読み込みと表示

次のプログラムを動くようにしてみよう.

 

画像ファイルlena.jpgを,所定の場所(Projects\prog2-1\prog2-1)に置いておく.

「プロジェクト」→「prog2-1のプロパティ」(prog2-1の部分はプロジェクト名に適宜修正)→「構成プロパティ」→VC++ディレクトリ→インクルードディレクトリを,Opencvincludeフォルダがあるところを追加(たとえば、C:opencv\include

「プロジェクト」→「prog2-1のプロパティ」(prog2-1の部分はプロジェクト名に適宜修正)→「構成プロパティ」→VC++ディレクトリ→ライブラリディレクトリを,(OpenCVのディレクトリ)\lib\debugおよび(OpenCVのディレクトリ)\lib\releaseフォルダにしておく.

 

補足

cv::imreadなどは,名前空間cvの中のimread関数を示す.そこで,

using namespace cv;

をはじめに宣言すれば,cv::の部分は不要となる.

 

 

プログラムの説明

 

cv:: image = cv::imread(file_name)

Matは,OpenCVの中で定義されているクラスであり,行列を扱うためのクラスである.画像を読み込む際にはMatクラスのインスタンスを宣言し,それに代入する.

cv::imread(ファイル名)は,ファイルから画像を入力する関数.

 

cv::namedWindow(window_name);

カッコ内の文字列の名前を付けて,ウィンドウを開く.

 

cv::imshow(window_name, image);

1引数の名前のウィンドウに,第2引数のMatクラスのインスタンスの中にある画像を表示する.

 

cv::waitKey(5000);

引数の示す時間(ms)のここで停止し,次に進む.その間にあったキー入力が返り値.

 

以上,imread, namedWindow, imshow, waitKeyは,OpenCVの関数である.

 

 

(2) カメラからの入力

カメラを使う場合は,あらかじめカメラに付属するサンプルプログラムなどで,動作を確認しておくこと.ドライバーが必要なカメラは,ドライバーをインストールすること.

 

 

プログラムの説明

 

cv::VideoCapture cap(0);

キャプチャー用のインスタンスcapを定義.引数の数値は,カメラの番号を示す.0は任意(あれば何でも)のケースを示す.

 

cap.set(CV_CAP_PROP_FRAME_WIDTH,640);

キャプチャー用インスタンスへの設定.第1パラメータが設定内容,第2パラメータが設定値.これは,画像の横のサイズを設定している.

cap.set(CV_CAP_PROP_FRAME_HEIGHT,480);

同様に,高さを設定している.

 

if(!cap.isOpened()) return -1;

cap.isOpened()は,カメラが開かれていればtrue,使えない状態ではfalseとなる.!(否定)がついているので,カメラが使えないとき-1を返り値としてreturnする.

 

while(1){ }

無限ループ

 

cap >> frame;

カメラからデータをframeに流し込む(ストリーム。Mat型にして代入)

 

if(cv::waitKey(30) >= 0)

返り値の値を見ている.>=ということは,何でもいいということ.何かキーが押されたら,以下を実行する.

 

break;

一番内側のループの外に抜ける.ここでは,while(1)の外に抜けるため,そのまま終了する.