OpenCV/VS 2005でCVCAMを使う

前準備

Visual Studio 2005でDirectShow?を扱う前準備として,

Platform SDKインストール

もしくは

Windows SDKインストール(2007年現在最新のSDK)

をインストール.

OpenCVのビルド

C:\Program Files\OpenCV\_make\opencv.sln
C:\Program Files\OpenCV\_make\opencv_directshow.sln

について,[ビルド]-[バッチビルド].

[注意]
Windows SDKを導入した場合は,ビルドを行う前に

C:\Program Files\OpenCV\filters\CalibFilter

のCalib3DWindow.hにある

#include <gl\glaux.h>

をコメントアウトしておく.

CVCAMを使ってキャプチャしてみる

C:\Program Files\OpenCV\otherlibs\cvcam\sample

にあるvidformat_sample.cppからAVIファイル読み込み処理を除き, カメラ選択を行う処理を追加してみた.

filecvcamdemo.cpp
//---------------------------------------------------------
// 概要      : CVCAMによるキャプチャ
// File Name : cvcamdemo.cpp
// Library   : OpenCV for MS-Windows 1.0
// Author    : dandelion
// Date      : Sep 16, 2007; 14:55
//---------------------------------------------------------

//ヘッダのインクルード
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include "cvcam.h"

//使用するライブラリ指定
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")
#pragma comment(lib,"cvcam.lib")

//キャプチャ関連の定数の定義
#define CAPTURE_WIDTH   640   //幅
#define CAPTURE_HEIGHT  480   //高さ
#define CAPTURE_FPS     30.0  //フレームレート

void callback(IplImage* image);
int ShowCamVideo(HWND hwnd, int width, int height, double fps);

int main( int argc, char** argv )
{
    //ダミーウィンドウを作成
    cvNamedWindow("dummy window", CV_WINDOW_AUTOSIZE);

    //原画像表示ウィンドウを作成
    cvNamedWindow("cvcam window", CV_WINDOW_AUTOSIZE);

    if( ShowCamVideo((HWND)cvGetWindowHandle("dummy window"), CAPTURE_WIDTH, CAPTURE_HEIGHT, CAPTURE_FPS) )
    {
        //ダミーウィンドウを消す
        cvDestroyWindow("dummy window");

        //キー入力を受け付けたらカメラを停止する
        cvWaitKey(0);
        cvcamStop();
    }

    //後処理
    cvcamExit();

    return 0;
}


//コールバック関数
void callback(IplImage* image)
{
    /* ここに画像処理部を書く */
    cvShowImage("cvcam window", image);
}

int ShowCamVideo(HWND hwnd, int width, int height, double fps)
{
    int *out; //選択カメラID

    //ビデオフォーマット(幅, 高さ, フレームレート)
    VidFormat vidFmt={ width, height, fps};

    //カメラ接続数を調べる
    int ncams = cvcamGetCamerasCount( );

    //カメラが接続されていなかったら0を返す
    if(ncams == 0) return 0;

    //使用するカメラを選択する
    int nSelected = cvcamSelectCamera( &out );

    //カメラを選択しなかったら0を返す
    if(nSelected == 0) return 0;

    //カメラプロパティの設定
    cvcamSetProperty(out[0], CVCAM_PROP_ENABLE, CVCAMTRUE);
    cvcamSetProperty(out[0], CVCAM_PROP_CALLBACK,callback);  //コールバック関数の指定
    cvcamSetProperty(out[0], CVCAM_PROP_WINDOW, &hwnd);//ウィンドウの指定
    cvcamSetProperty(out[0], CVCAM_PROP_SETFORMAT, &vidFmt); //ビデオフォーマットプロパティの設定

    //カメラプロパティ設定有効化
    if( !cvcamInit() ){
        return 0;
    }

    cvcamStart();

    return 1;
}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-06-19 (木) 21:46:00 (3413d)