Classes
Class | Description | |
---|---|---|
CFviCameraControl | カメラ制御クラス | |
CFviExceptionDS | DirectShow 関連 例外クラス | |
CFviFilterInfo | フィルタ情報 | |
CFviFormatInfo | フォーマット形式 | |
CFviGrabber | DirectShow ビデオ入力クラス | |
CFviGrabberParam | DirectShow ビデオ入力パラメータクラス | |
CFviGrabberUI | DirectShow ビデオ入力コンポーネント | |
CFviGraph | DirectShow フィルタグラフ | |
CFviPinInfo |
ピン情報
| |
CFviVideoProcAmp | ビデオ信号品質調整クラス | |
Function |
DirectShow 関連関数群
| |
GrabberEventArgs | ビデオ入力イベント引数クラス | |
SelectCameraForm | カメラ選択フォーム |
Delegates
Delegate | Description | |
---|---|---|
GrabberEventHandler | ビデオ入力イベントデリゲート |
Enumerations
Enumeration | Description | |
---|---|---|
CameraControlProperty |
カメラ制御プロパティを示す定数
| |
FILTER_STATE |
フィルタグラフの状態を示す定数
| |
GrabberEventStatus |
ビデオ入力イベント定数
| |
HRESULT |
エラーコード定数
| |
PIN_DIRECTION |
ピンの方向を示す定数
| |
PropertyDialogType |
プロパティダイアログ種別
| |
VideoProcAmpProperty |
ビデオ信号品質プロパティを示す定数
|
Remarks
このネームスペースには、Microsoft DirectShow を使用したカメラ取り込み機能を集約しています。
カメラは Microsoft DirectShow 対応のものを使用してください。
トピック:
初めに:
FVIL.DS ネームスペースにあるカメラ取り込み機能は、弊社画像ライブラリを使用したアプリケーション作成手法の習得や画像処理方法の選択・簡易な評価といった、
あくまでも調査・準備段階での使用を前提としております。
したがって、カメラからの取り込み速度や画質については保証外とし、実際の業務にご利用になる場合には責任の範囲外とさせていただきます。
尚、弊社ユニット製品の FV2x10-XPe シリーズ では、本ライブラリは使用できません。 FV2x10-XPe シリーズの CFカードの容量に限りがある為、 カメラメーカーから提供されているドライバをインストールすることも出来ませんのでご了承ください。
カメラの接続:
カメラは Microsoft DirectShow 対応のものを使用してください。
下図は、安価な USB ウェブカメラを使った接続例です。
USB カメラは PC の USB ポートに接続するだけで画像の取り込みが可能です。
画像の取り込み:
以下は FVIL.DS で画像取り込みを行う場合の基本的な構成です。
カメラのパラメータはインスタンスに値を直接指定する他、
SelectCameraForm による対話的な設定や XML ファイルからの読み込みも可能です。
XML ファイルの内容はカメラによって異なります。
本ライブラリに付属のサンプルアプリケーション(WILsampleCS や USBCameraSample)を使用して
実際にカメラに接続した後、メニューから『XML ファイル保存』を実行すると手軽に生成できます。
カメラの制御:
接続しているカメラの制御はデバイスのプロパティページ(下図)から行えます。
ユーザのプログラムからこれらのプロパティを変更するには、
ビデオ信号品質調整クラス(CFviVideoProcAmp)や
カメラ制御クラス(CFviCameraControl)を使用してください。
前者は下図の 1 に相当し、後者は下図の 2 に相当します。
1) 画像の調整 | 2) カメラ制御 |
このプロパティページは、カメラ選択フォームのデバイスのプロパティボタン(下図)から呼び出せます。 ユーザのプログラムから呼び出すには、 OpenPropertyDialog(Control, String, PropertyDialogType) を使用してください。
サンプルコード:
1フレーム分の画像を取り込み、その画像をファイルに保存するサンプルコードです。
C# | Copy |
---|---|
using System; using System.Collections.Generic; using System.Text; using System.Drawing; using fvalgcli; using System.Windows.Forms; using FVIL.DS; namespace User.SampleCode { public partial class DS { [FvPluginExecute] public void GrabberUI_OpenDialog() { try { // 1) インスタンスの生成. FVIL.DS.CFviGrabberUI grabber = new FVIL.DS.CFviGrabberUI(); // 2) カメラ選択ダイアログの表示. grabber.OpenDialog(); // E) 確認. { // パラメータの取得. FVIL.DS.CFviGrabberParam param = grabber.Param; Console.WriteLine("FilterCategory : {0}", param.FilterCategory); Console.WriteLine("FilterFormatInfo : {0}", param.FilterFormatInfo); Console.WriteLine("FilterInfo : {0}", param.FilterInfo); Console.WriteLine("FilterPinInfo : {0}", param.FilterPinInfo); Console.WriteLine("RenderID : {0}", param.RenderID); Console.WriteLine("SampleFormatInfo : {0}", param.SampleFormatInfo); } // 3) 画像取り込み用バッファの設定. grabber.Controller.ImageType = FVIL.ImageType.RGB24; for( int index = 0; index < 3 ; index++) grabber.Controller.Images.Add(new FVIL.Data.CFviImage()); grabber.Controller.Validate(); // 4) 入力の開始. grabber.Controller.Run(); // 5) 1フレーム取り込み完了まで待機. if (!grabber.Controller.Wait(10000)) { Console.WriteLine("TimeOut"); } // 6) 入力の停止. grabber.Controller.Stop(); // E) 画像の保存. FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/DS.GrabberUI_OpenDialog.bmp", grabber.Controller.LastImage); } catch (FVIL.DS.CFviExceptionDS ex) { Console.WriteLine("Message:{0}", ex.Message); Console.WriteLine("DSMessage:{0}", CFviExceptionDS.GetDirectShowMessage(ex.ComError)); } catch (FVIL.CFviException ex) { Console.WriteLine("--Function = {0} ErrorCode = {1}", ex.Function, ex.ErrorCode); Console.WriteLine("--Message:{0}", ex.Message); } catch (System.Exception ex) { Console.WriteLine("--Message:{0}", ex.Message); } } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli Imports System.Windows.Forms Imports FVIL.DS Namespace SampleCode Public Partial Class DS <FvPluginExecute> _ Public Sub GrabberUI_OpenDialog() Try ' 1) インスタンスの生成. Dim grabber As New FVIL.DS.CFviGrabberUI() ' 2) カメラ選択ダイアログの表示. grabber.OpenDialog() ' E) 確認. If True Then ' パラメータの取得. Dim param As FVIL.DS.CFviGrabberParam = grabber.Param Console.WriteLine("FilterCategory" & vbTab & ": {0}", param.FilterCategory) Console.WriteLine("FilterFormatInfo : {0}", param.FilterFormatInfo) Console.WriteLine("FilterInfo" & vbTab & vbTab & ": {0}", param.FilterInfo) Console.WriteLine("FilterPinInfo" & vbTab & ": {0}", param.FilterPinInfo) Console.WriteLine("RenderID" & vbTab & vbTab & vbTab & ": {0}", param.RenderID) Console.WriteLine("SampleFormatInfo : {0}", param.SampleFormatInfo) End If ' 3) 画像取り込み用バッファの設定. grabber.Controller.ImageType = FVIL.ImageType.RGB24 For index As Integer = 0 To 2 grabber.Controller.Images.Add(New FVIL.Data.CFviImage()) Next grabber.Controller.Validate() ' 4) 入力の開始. grabber.Controller.Run() ' 5) 1フレーム取り込み完了まで待機. If Not grabber.Controller.Wait(10000) Then Console.WriteLine("TimeOut") End If ' 6) 入力の停止. grabber.Controller.[Stop]() ' E) 画像の保存. FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/DS.GrabberUI_OpenDialog.bmp", grabber.Controller.LastImage) Catch ex As FVIL.DS.CFviExceptionDS Console.WriteLine("Message:{0}", ex.Message) Console.WriteLine("DSMessage:{0}", CFviExceptionDS.GetDirectShowMessage(ex.ComError)) Catch ex As FVIL.CFviException Console.WriteLine("--Function = {0} ErrorCode = {1}", ex.[Function], ex.ErrorCode) Console.WriteLine("--Message:{0}", ex.Message) Catch ex As System.Exception Console.WriteLine("--Message:{0}", ex.Message) End Try End Sub End Class End Namespace |
DirectShow 用語:
フィルタ |
DirectShow では、データに対して何らかの処理を行うコンポーネントをフィルタと呼びます。
カメラからの画像を取り込む処理もフィルタの1種として扱われます。 なお、データをファイルやカメラから取得するような機能を提供するフィルタを DirectShow ではソースフィルタと呼びます。 複数のカメラを接続している場合、ソースフィルタは複数存在することになり、それらには自動的にインデックスが付けられます。 カメラを指定する際には、デバイス名のほか、このインデックスを使用することもできます。 (参考) SelectCameraForm |
ピン |
DirectShow では他のフィルタと接続して1つの処理を実現しますが、その際のフィルタ同士の接続に使われるインタフェースをピンと呼びます。データを入力される側のインタフェースを入力ピン、出力する側のインタフェースを出力ピンと呼びます。 1つのフィルタが同じ方向の複数のピンを持つこともあります。 (例)"静止画像"出力ピンと"キャプチャ"出力ピンの2つを持つソースフィルタ. (参考) SelectCameraForm |
フィルタグラフ |
DirectShow ではファイルやカメラから取り込んだデータが、接続された複数のフィルタを経由することで処理されます。その特定のタスクを行うために接続されたフィルタの集合をフィルタグラフと呼びます。 DirectShow で何らかの処理をする為にはまず、このフィルタグラフに必要なフィルタを追加して一連の処理を完成させる必要があります。そして、フィルタグラフの開始・停止で、このまとめられた一連の処理の実行を開始、または停止できます。 FVIL.DS ではカメラからの画像取り込み機能を備えたフィルタグラフとしてCFviGrabber を用意しています。 |