USBカメラをC#で使おう |
作成日: 2003/10/02 最終更新日: 2005/1/18 |
◆概要 | ||||
USBカメラをWindows環境で利用するためには,主に二種類の方法があります.一つはVideo for Windowsを利用する方法,もう一つはDirect Showを利用する方法です.今回は,後者のDirectShowを利用して,C#でUSBカメラを制御する方法を紹介します.このプログラムは,以下のような機能を持っています. ここではまず,DirectShowの基本的な用語などをまとめ,次に機能ごとにプログラムの大まかな流れを説明していきます.より詳しい内容については,サンプルコードや参考URLを参照してください. なお,動作確認環境は以下のとおりです.他のUSBカメラでもおそらく動作すると思いますが,未確認です.
| ||||
|
||||
|
||||
◆ダウンロード |
実行ファイル (zip) ※サンプルコードをコンパイルする前に,参照パスの設定を行う必要があります.ソリューションエクスプローラーから,DirectShowTest(プロジェクト名)を選択し,右クリックからプロパティ→参照パスを開き,"."(カレントディレクトリ)をパスに追加してください.この設定は保存時に絶対パスに変換されてしまうため,環境ごとに設定する必要があるようです.(2004/10/25追加) |
◆DirectShowNet |
DirectX9からは,C#用のクラスライブラリが標準添付されていますが,DirectShowだけはなぜか利用することができません.そこで,ここではDirectShowNetという,.Net用にDirectShowをラップしたライブラリを利用します.DirectShowNetでは,DirectShowの多くの機能をC#から利用することができます. ※ ただし,一部省略されているクラス・インタフェースも存在します.本ページの説明はDirectShowNetを利用したものです. |
◆DirectShowの用語集 |
DirectShowでは独特の用語が多数用いられており,大変とっつきにくいものになっています.ここでは,DirectShowでプログラミングを行う際に最低限知っておく必要がある用語について説明します.各項目の[ ]内の用語は,関連するDirectShowNet内の代表的なクラスやインタフェースです.
ex.)AVI ファイルを再生する場合のフィルタグラフ の一例
全てのフィルタは,ピンを介して他のフィルタに接続する,と考える. |
◆動画のキャプチャ |
動画のキャプチャは,(圧縮などを考えなければ)静止画のキャプチャよりも簡単です.また,多くのコードが静止画のキャプチャと共通するため,異なる部分のみ説明します. ※今回紹介する方法は,圧縮用のフィルタを利用していないため,キャプチャした動画のファイルサイズが非常に大きくなる点にご注意ください.(320*240,10秒間で100M程度) |
(準備編&実行編) |
|
◆キャプチャした動画の再生 |
次に,キャプチャした動画をファイルから再生する方法を説明します.これは,今回紹介した三つの中では最も基本的で,簡単なものです.(Microsoftのドキュメントでは,「DirectShowのHello
World」とうたわれています.) こちらも,静止画のキャプチャと共通するコードについては省略します. |
(準備編&実行編) |
|
◆おまけ: USBカメラのプロパティ | ||||
DirectShowでは,USBカメラのプロパティを簡単に制御することも可能です.制御できるプロパティには,(1)ストリーム形式の設定(図2)と,(2)画像補正系の設定(図3)の二種類があるようです. |
||||
|
||||
-ストリーム形式のプロパティ |
||||
|
||||
-画像補正系のプロパティ |
||||
|
||||
◆参考URL |
|