OpenCVによるWebカメラからの画像の取得

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] ライブラリを参照する必要があります。

ウィンドウ

cvNamedWindow - ウィンドウの作成

int cvNamedWindow(
    const char* name,             // ウィンドウの識別名。タイトルバーのキャプションに表示される
    int flags=CV_WINDOW_AUTOSIZE  // ウィンドウのフラグ (利用可能なものは CV_WINDOW_AUTOSIZEのみ)
    );
cvNamedWindow - OpenCV 1.0 リファレンス - opencv.jp

cvDestroyWindow - ウィンドウの破棄

void cvDestroyWindow(
    const char* name  // ウィンドウの識別名
    );
cvDestroyWindow - OpenCV 1.0 リファレンス - opencv.jp

cvShowImage - ウィンドウへの画像の表示

void cvShowImage(
    const char* name,   // ウィンドウの識別名
    const CvArr* image  // 画像
    );
cvShowImage - OpenCV 1.0 リファレンス - opencv.jp

カメラ (ビデオキャプチャ)

cvCreateCameraCapture - カメラからのビデオキャプチャの初期化

CvCapture* cvCreateCameraCapture(
    int index   // 使用するカメラのインデックス
    );
cvCreateCameraCapture - OpenCV 1.0 リファレンス - opencv.jp

カメラが1台のみの場合は、引数のindexの値は無視されます。しかし複数のカメラが接続されているときに無効な値を指定すると、「An invalid handle was specified.」として 0xC0000008の外部例外が発生します。

cvReleaseCapture - ビデオキャプチャの解放

void cvReleaseCapture(
    CvCapture** capture  // ビデオキャプチャのポインタ
    );
cvReleaseCapture - OpenCV 1.0 リファレンス - opencv.jp

cvQueryFrame - ビデオキャプチャから1フレームの取得

IplImage* cvQueryFrame(
    CvCapture* capture  // ビデオキャプチャ
    );
cvQueryFrame - OpenCV 1.0 リファレンス - opencv.jp

キー入力

cvWaitKey - キーボード入力の取得

int cvWaitKey(
    int delay=0 // 遅延時間 [ms]
    );
cvWaitKey - OpenCV 1.0 リファレンス - opencv.jp

入力はキーコードで返されます。入力前に遅延時間を過ぎたときには、戻り値が-1となります。また遅延時間に負数を指定したときには、無限に待ちます。