知能情報学実験及び演習(田中)
Visual C++によるプログラミングとOpenCV
Visual C++によるプログラミング
(1) ファイルからの読み込みと表示
次のプログラムを動くようにしてみよう.
画像ファイルlena.jpgを,所定の場所(Projects\prog2-1\prog2-1)に置いておく.
「プロジェクト」→「prog2-1のプロパティ」(prog2-1の部分はプロジェクト名に適宜修正)→「構成プロパティ」→VC++ディレクトリ→インクルードディレクトリを,Opencvのincludeフォルダがあるところを追加(たとえば、C:opencv2.3.0\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に移す
if(cv::waitKey(30) >= 0)
返り値の値を見ている.>=ということは,何でもいいということ.何かキーが押されたら,以下を実行する.
break;
一番内側のループの外に抜ける.ここでは,while(1)の外に抜けるため,そのまま終了する.