Top / Prog / BCB / USBカメラで動画像取り込み

はじめに

PhotoShop?とDirectorを使う授業を取っていたときに、 自分の体の動きを取り込む必要があったので、 折角だからLogitechのQV4000を買ってしまいました。
ただ使うだけではおもしろくないので、自作ソフトで 取り込めるようにしてみました。

今回試した環境

  • Windows98以降が使え、USBポートのあるパソコン
  • USBカメラ「Logitech QV4000」
  • C++Builder Ver.5

今回使用したUSBカメラは、Linuxでも使用できます (だから、こんなに高いのを買ったのですが・・・。 ちなみに、LogitechのUSBカメラは大抵Linuxでも使えるみたいです)。~ 機会があれば、Linux版のプログラムもチャレンジしてみたいですね。

準備

QV4000付属のドライバをインストールしておいてください。 また、付属のツールを使って、カメラが確実に動作することを確認しておいてください。

プログラム

  • Unit1.cpp
    //---------------------------------------------------------------------------
    //  USBカメラで動画取り込み
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <windows.h>
    #pragma hdrstop
    #include <vfw.h>
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    
    HWND hWndCap;
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    { 
    }
    //---------------------------------------------------------------------------
    //チェックボックスのチェックが切り替わったとき
    void __fastcall TForm1::CheckBox1Click(TObject *Sender)
    {
    	if(CheckBox1->Checked){
    	 	//チェックが入ったとき
    		 hWndCap = capCreateCaptureWindow(
    			"Captrue Window",//キャプチャウィンドウの名前
    			  WS_CHILD | WS_VISIBLE,//ウィンドウスタイル
    			 1 , 1,//表示位置
    			  320, 240,//ウィンドウサイズ
    			 Panel1->Handle,//親のハンドル
    			  NULL);//よくわかりません
    		
    		 capDriverConnect( hWndCap, 0 );//チャンネル1に接続
    		
    		 //capOverlay( hWndCap, TRUE );//オーバーレイモードで動作
    		capPreviewRate( hWndCap, 1 );//プレビューレートの設定
    		 capPreview( hWndCap, TRUE );//プレビューモードで動作
    		
    	}els e{
    	 	capDriverDisconnect(hWndCap);//ドライバの解放
    	} 
    } 
    //---------------------------------------------------------------------------
    
  • Unit1.h
    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// IDE 管理のコンポーネント
        TPanel *Panel1;
       T CheckBox *CheckBox1;
        void __fastcall CheckBox1Click(TObject *Sender);
    private:	// ユーザー宣言
    public:		// ユーザー宣言
        __fastcall TForm1(TComponent* Owner);
    }; 
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
  • Unit1.dfm
    object Form1: TForm1
     Left = 211
     Top = 117
     BorderStyle = bsDialog
     Caption = 'Form1'
     ClientHeight = 281
     ClientWidth = 330
     Color = clBtnFace
     Font.Charset = SHIFTJIS_CHARSET
     Font.Color = clWindowText
     Font.Height = -12
     Font.Name = 'MS Pゴシック'
     Font.Style = []
     OldCreateOrder = False
     Position = poScreenCenter
     PixelsPerInch = 96
     TextHeight = 12
     object Button1: TButton
       Left = 4
       Top = 4
       Width = 75
       Height = 25
       Caption = '&Capture'
       Enabled = False
       TabOrder = 0
       OnClick = Button1Click
     end
     object Panel1: TPanel
       Left = 4
       Top = 36
       Width = 322
       Height = 242
       BevelOuter = bvLowered
       Caption = 'Panel1'
       TabOrder = 1
     end
     object Button2: TButton
       Left = 88
       Top = 4
       Width = 75
       Height = 25
       Caption = 'Streaming'
       Enabled = False
       TabOrder = 2
       OnClick = Button2Click
     end
     object CheckBox1: TCheckBox
       Left = 172
       Top = 8
       Width = 97
       Height = 17
       Caption = 'Streaming2'
       TabOrder = 3
       OnClick = CheckBox1Click
     end
    end

解説

カメラ関係の処理を行う場合は、必ず"vfw.h"(Video for Windows)をインクルードしておいてください。
チェックボックスのOn / Offで、取り込み・停止が切り替えられます。
チェックが入ると、キャプチャした画像を表示するウィンドウハンドルを指定(今回は、TPanel)し、 カメラと接続して画像の取り込みを開始、それぞれの取り込みモードを指定します。
チェックがはずれると、カメラとの接続を切断します。



続編~

Prog/BCB/USBカメラで動画像取り込み2
複数台のカメラから取り込む取り込む場合の例です。

参考:

2004-12-22 (水) 17:59:54

プログラミング


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-05-30 (水) 22:49:31 (3707d)