Webカメラから画像を取得して、それをウィンドウに表示する方法について解説します。

#include <stdio.h>
#include <highgui.h>
int main()
{
// カメラからのビデオキャプチャを初期化する
CvCapture *videoCapture = cvCreateCameraCapture( 1 );
if( videoCapture == NULL )
{
return -1;
}
// ウィンドウを作成する
char windowName[] = "camera";
cvNamedWindow( windowName, CV_WINDOW_AUTOSIZE );
// 何かキーが押下されるまで、ループをくり返す
while( cvWaitKey( 1 ) == -1 )
{
// カメラから1フレーム取得する
IplImage *image = cvQueryFrame( videoCapture );
// ウィンドウに画像を表示する
cvShowImage( windowName, image );
}
// ビデオキャプチャを解放する
cvReleaseCapture( &videoCapture );
// ウィンドウを破棄する
cvDestroyWindow( windowName );
return 0;
}
※[highgui.lib] ライブラリを参照する必要があります。
int cvNamedWindow(
const char* name, // ウィンドウの識別名。タイトルバーのキャプションに表示される
int flags=CV_WINDOW_AUTOSIZE // ウィンドウのフラグ (利用可能なものは CV_WINDOW_AUTOSIZEのみ)
);
cvNamedWindow - OpenCV 1.0 リファレンス - opencv.jp
void cvDestroyWindow(
const char* name // ウィンドウの識別名
);
cvDestroyWindow - OpenCV 1.0 リファレンス - opencv.jp
void cvShowImage(
const char* name, // ウィンドウの識別名
const CvArr* image // 画像
);
cvShowImage - OpenCV 1.0 リファレンス - opencv.jp
CvCapture* cvCreateCameraCapture(
int index // 使用するカメラのインデックス
);
cvCreateCameraCapture - OpenCV 1.0 リファレンス - opencv.jp
カメラが1台のみの場合は、引数のindexの値は無視されます。しかし複数のカメラが接続されているときに無効な値を指定すると、「An invalid handle was specified.」として 0xC0000008の外部例外が発生します。
void cvReleaseCapture(
CvCapture** capture // ビデオキャプチャのポインタ
);
cvReleaseCapture - OpenCV 1.0 リファレンス - opencv.jp
IplImage* cvQueryFrame(
CvCapture* capture // ビデオキャプチャ
);
cvQueryFrame - OpenCV 1.0 リファレンス - opencv.jp
int cvWaitKey(
int delay=0 // 遅延時間 [ms]
);
cvWaitKey - OpenCV 1.0 リファレンス - opencv.jp
入力はキーコードで返されます。入力前に遅延時間を過ぎたときには、戻り値が-1となります。また遅延時間に負数を指定したときには、無限に待ちます。