IC Imaging Control (.NET C#/Visual Basic)

  • サンプルプログラムトップページ
  • デバイスのオープンとハンドリング
    • C# VB.NET カメラの映像を既存のアプリケーションに組み込む方法
    • C# VB.NET デバイスを開く
    • C# VB.NET デバイスの開閉
    • C# VB.NET ダイアログボックスを使用してデバイスを開く
    • C# VB.NET 複数のデバイスを開く
    • C# VB.NET デバイスのシリアル番号を読み取る
    • C# VB.NET ICImagingControlの標準プロパティダイアログの使用
    • C# VB.NET デバイスプロパティ設定の保存と復元
  • ライブ表示
    • C# VB.NET ライブ表示のリサイズ
    • C# VB.NET フルスクリーン表示
    • C# VB.NET 十字マークのオーバーレイ
    • C# VB.NET WFPでvideoWindowを使ったビデオ表示
  • フレームフィルタ
    • C# VB.NET 低輝度、高輝度ピクセルの強調 その1
    • C# VB.NET 低輝度、高輝度ピクセルの強調 その2
  • ライブ表示とマルチプロセス
    • C# VB.NET ライブ表示のみ
    • C# VB.NET 静止画保存
    • C# VB.NET 任意のタイミングで画像処理と静止画保存を同時に処理
    • C# VB.NET 録画しながら任意のタイミングで静止画保存
    • C# VB.NET 全フレームリアルタイム画像処理しながら
             NG判定を静止画保存
    • C# VB.NET 全フレームリアルタイム画像処理しながら
             NG判定を静止画保存、同時に録画
  • イメージの取得
    • C# VB.NET イメージデータの取得
    • C# VB.NET 静止画ファイル保存(BMP)
    • C# VB.NET 静止画ファイル保存(JPEG)
    • C# VB.NET 静止画ファイルの連番保存
    • C# VB.NET カメラ画像保存&FTPで任意のサーバーに転送する
    • C# VB.NET リングバッファを使用したイメージシーケンスの取得と再生
    • C# VB.NET 静止画とAVI動画保存
    • C# VB.NET メモリーレコーディング
             (高速カメラで撮影した現象をRAMメモリー領域に保存)
    • C# VB.NET ソフトウェアトリガーで画像を表示・保存
    • C# VB.NET 録画時間を指定したAVIファイル保存
    • C# VB.NET 外部トリガーで録画の開始
    • C# VB.NET 取得したイメージの輝度値をCSV形式で出力する
             (16bit対応)
  • 画像処理
    • C# VB.NET イメージデータへのアクセス
    • C# VB.NET コントラストの強調 - Part 1
    • C# VB.NET コントラストの強調 - Part 2
    • C# VB.NET コントラストの強調 - Part 3
    • C# VB.NET レーザーポインタの位置を特定する
    • C# VB.NET OpenCVの画像処理
             (アナログタコメーターのデジタル化)
    • C# VB.NET AIモデルを使ったリアルタイム処理
  • Version 3.5サンプル
    • C# VB.NET 関心領域の画像更新
      Advanced Image Processing
    • C# VB.NET 2値化
      Binarization
    • C# VB.NET 明るさの調整
      BrightnessProperty
    • C# VB.NET 動画保存(MediaStreamSink)
      Capturing a Video File
    • C# VB.NET 動画保存(AviStartCapture)
      Capturing an AVI File
    • C# VB.NET 共通ファイル
      Common
    • C# VB.NET オーバーレイの作成
      Creating an Overlay
    • C# VB.NET デモアプリ
      demoapp
    • C# VB.NET VCDプロパティ:GPIOプロパティ編
      DigitalIO
    • C# VB.NET コールバック関数を使ってバッファを表示させる
      Display Buffer
    • C# VB.NET フィルターの適用
      Filter Inspector
    • C# VB.NET 静止画をキャプチャし保存する
      Grabbing an Image
    • C# VB.NET イメージバッファの輝度値を読み込み、輝度反転処理を施す
      Image Processing
    • C# VB.NET VCDプロパティ:全プロパティ一覧を表示する編
      List VCDProperties
    • C# VB.NET デバイス設定ダイアログの作成
      Making Device Settings
    • C# VB.NET イメージバッファにアクセスする
      Pixelformat
    • C# VB.NET コーデックのプロパティを保存する
      Saving Codec Properties
    • C# VB.NET スクロールとズーム
      croll And Zoom
    • C# VB.NET VCDプロパティ:露光とゲイン編
      StandardProperties
    • C# VB.NET VCDプロパティ:ストロボアウト編
      Strobe
    • C# VB.NET VCDプロパティ:
             プロパティダイアログ画面のカスタマイズ編
      VCD Property Page
    • C# VB.NET VCDプロパティ:明るさとホワイトバランス編
      VCD Simple Property
    • C# VB.NET VCDプロパティ:オートフォーカス編
    • C# VB.NET デバイスの再接続方法とフレーム落ちの確認
  • リンク集

    ICImagingControl WEB APIリファレンスマニュアル/サンプルプログラム

    :日本語対応済み :日本語化準備中
    開発言語 APIリファレンスマニュアル サンプルプログラム
    C 4.0
    ()
    - - 4.0
    ()
    - -
    C++ 4.0
    ()
    3.5
    ()
    3.4
    ()
    4.0
    ()
    3.5 3.4
    ()
    C#/VB.NET 4.0
    ()
    3.5
    ()
    3.4
    ()
    4.0
    ()
    3.5
    ()
    3.4
    ()
    Python 4.0
    ()
    3.5 3.4
    ()
    4.0
    ()
    3.5 3.4
    ()

VCDプロパティ:GPIOプロパティ編

概要

TheImagingSource社のカメラには外部トリガー信号を搭載しているカメラがあります。
外部トリガーによって複数台のカメラの同期をとったり、ストロボ出力をすることで照明と撮影タイミングを合わせることができます。
外部トリガー・ストロボアウトはカメラのVCDプロパティにアクセスすることで制御することができます。
ここでは外部トリガーをカメラに入力した時のステータスと、ストロボアウトでマニュアルで出力するための方法について説明しています。
なお、トリガーと同期してストロボ出力の機能を使うにはVCDID_StrobeのVCDプロパティのクラスからの制御となりますのでご注意ください。

サンプルプログラム

Software IC Imaging Control 3.5, Visual Studio™ 2019
サンプル(C#) digitalio_cs_3.5.zip
サンプル(VB.NET) digitalio_vb_3.5.zip

実行結果

Visual Studioのプログラム上ではすでにボタンの設置や関数は定義済ですので、IC Imaging Contorl3.5をインストールされていれば、実行ボタンだけですぐにデバッグで動作確認することができます。
画面にあるそれぞれのボタンなどのコントローラの機能は下記の通りです。

[Read Input]ボタン ボタンを押した時トリガー信号を入力しカメラ側で検知した時、Input StateチェックボックスをONにする。検知しない場合にはInput StateチェックボックスをOFFにする。
[Input State]チェックボックス Read Inputボタンでカメラでトリガー信号を検知したらチェックが反映される。
[Write Input]ボタン クリックしたタイミングでOutput Stateチェックボックスのステータス値でSTROBE_OUTを出力する。
[Output State]チェックボックス Write Inputボタンをクリックしたときに反映させる値。チェックONの場合STROBE_OUTをhigh、チェックOFFの場合STROBE_OUTをLowにする。

VCDプロパティの宣言

ストロボアウトとトリガーインの検知で使用するVCDプロパティは下記の4つとなります。

private VCDRangeProperty _gpioIn;
private VCDRangeProperty _gpioOut;
private VCDButtonProperty _gpioRead;
private VCDButtonProperty _gpioWrite;
Private _GPIn As VCDRangeProperty
Private _GPOut As VCDRangeProperty
Private _GPInRead As VCDButtonProperty
Private _GPIOWrite As VCDButtonProperty

プロパティにアクセスするための下準備

private void Form1_Load( object sender, EventArgs e )
{

    // xmlファイルを読み込む
    if( !icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml") )
    {
        MessageBox.Show("No device was selected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
        this.Close();
        return;
    }

    // VCDプロパティのクラスを初期化して、ICImagingControl オブジェクトのプロパティにアクセスします。
    _gpioIn = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>( VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOIn );
    _gpioOut = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>( VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOOut );
    _gpioRead = icImagingControl1.VCDPropertyItems.Find<VCDButtonProperty>( VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIORead );
    _gpioWrite = icImagingControl1.VCDPropertyItems.Find<VCDButtonProperty>( VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOWrite );

    // まず、デジタル IO が現在のビデオ キャプチャ デバイスでサポートされているかどうかを確認します。
    if ( _gpioIn != null && _gpioOut != null && _gpioRead != null && _gpioWrite != null )
    {
        // デジタル入力状態を取得します。
        cmdReadDigitalInput.Enabled = true;
        ReadDigitalInput();

        // デジタル出力の状態を取得します。
        cmdWriteDigitalOutput.Enabled = true;
        chkDigitalOutputState.Enabled = true;
        if( _gpioOut.Value == 1 )
        {
            chkDigitalOutputState.CheckState = CheckState.Checked;
        }
        else
        {
            chkDigitalOutputState.CheckState = CheckState.Unchecked;
        }
    }
    else
    {
        cmdReadDigitalInput.Enabled = false;
        cmdWriteDigitalOutput.Enabled = false;
        chkDigitalOutputState.Enabled = false;
    }


    // ライブストリーミング開始
    icImagingControl1.LiveStart();
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


    If Not IcImagingControl1.DeviceValid Then
        IcImagingControl1.ShowDeviceSettingsDialog()

        If Not IcImagingControl1.DeviceValid Then
            MsgBox("No device was selected.", MsgBoxStyle.Information, "DigitalIO")

            Me.Close()
            Exit Sub
        End If
    End If


    ' VCDプロパティのクラスを初期化して、ICImagingControl オブジェクトのプロパティにアクセスします。
    IcImagingControl1.VCDPropertyItems.Find(VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOIn, _GPIn)
    IcImagingControl1.VCDPropertyItems.Find(VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOOut, _GPOut)
    IcImagingControl1.VCDPropertyItems.Find(VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIORead, _GPInRead)
    IcImagingControl1.VCDPropertyItems.Find(VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOWrite, _GPIOWrite)



    If Not _GPIn Is Nothing Then

        cmdReadDigitalInput.Enabled = True
        ReadDigitalInput()
    Else
        cmdReadDigitalInput.Enabled = False
    End If


    If Not _GPOut Is Nothing Then
        'デジタル出力の状態を取得します。
        cmdWriteDigitalOutput.Enabled = True
        chkDigitalOutputState.Enabled = True

        If _GPOut.Value = 1 Then
            chkDigitalOutputState.CheckState = CheckState.Checked
        Else
            chkDigitalOutputState.CheckState = CheckState.Unchecked
        End If
    Else
        cmdWriteDigitalOutput.Enabled = False
        chkDigitalOutputState.Enabled = False
    End If

    ' ライブストリーミング開始
    IcImagingControl1.LiveStart()

End Sub

カメラに実装されている下記のプロパティにアクセスします。

VCDElement_GPIOIn トリガー入力のステータス
VCDElement_GPIOOut ストロボ出力のステータス
VCDElement_GPIORead トリガー信号を読み取り
VCDElement_GPIOWrite ストロボアウトの出力

フォームロードするタイミングでカメラのVCDプロパティにアクセスして、接続しているカメラが外部トリガー信号に対応している機種か確認します。その後、接続しているカメラが外部トリガー信号に対応していれば、外部トリガーストロボ出力の現在のステータスを[Input State]チェックボックスと[Output State]チェックボックスに反映させライブストリームを開始しています。

[Read Input]ボタンをクリックした時の動作

private void cmdReadDigitalInput_Click(object sender, EventArgs e)
{
    ReadDigitalInput();
}

private void ReadDigitalInput()
{
    // カメラからトリガー入力を読み取ります。
    _gpioRead.Push();

    // デジタル入力の状態を chkDigitalInputState チェックボックスに設定します。
    if( _gpioIn.Value == 1 )
    {
        chkDigitalInputState.CheckState = CheckState.Checked;
    }
    else
    {
        chkDigitalInputState.CheckState = CheckState.Unchecked;
    }
}
Private Sub cmdReadDigitalInput_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdReadDigitalInput.Click
    ReadDigitalInput()
End Sub
Private Sub ReadDigitalInput()
    '  カメラからトリガー入力を読み取ります。
    _GPInRead.Push()

    If _GPIn.Value = 1 Then
        chkDigitalInputState.CheckState = CheckState.Checked
    Else
        chkDigitalInputState.CheckState = CheckState.Unchecked
    End If

End Sub

[Read Input]ボタンをクリックした時のイベントです。
カメラからトリガー入力を読み取り、外部トリガの有り無しをInput Stateチェックボックスに反映させています。

[Write Input]ボタンをクリックした時の動作

private void cmdWriteDigitalOutput_Click( object sender, EventArgs e )
{
    // チェックボックスの値をカメラに反映
    if( chkDigitalOutputState.CheckState == CheckState.Checked )
    {
        _gpioOut.Value = 1;
    }
    else
    {
        _gpioOut.Value = 0;
    }
    // 現在のステータスでストロボ出力を実行
    _gpioWrite.Push();
}
Private Sub cmdWriteDigitalOutput_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdWriteDigitalOutput.Click
    ' チェックボックスの値をカメラに反映
    If chkDigitalOutputState.CheckState = CheckState.Checked Then
        _GPOut.Value = 1
    Else
        _GPOut.Value = 0
    End If

    ' 現在のステータスでストロボ出力を実行
    _GPInRead.Push()
End Sub

[Output State]のチェックボックスにOnの時にストロボ出力するようにしています。

その他、VCDプロパティの使用法については下記をご覧ください。

技術関連項目:VCDプロパティ
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

▲ このページの先頭に戻る

Copyright © ARGO Corporation. All Rights Reserved.