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
    ()

コールバック関数を使ってバッファを表示させる

概要

通常、IC Imaging Controlでカメラからの画像を表示するにはWindowosFormにIC imaging Controlをフォームを張り付け、LiveStartメソッドを使うことでライブストリームを開始することができますが、カメラから取得した画像毎に処理をしなければならないことがあります。(例えば画像を取得したら静止画保存する等)ICImagingContorlクラスのLiveDisplayプロパティを無効にすることで、コントロールウィンドウに変更されたバッファを表示しながら処理を行うことができます。

サンプルプログラム

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

実行結果

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

[Start]ボタン クリックすることでライブストリームを開始します。
[Stop]ボタン クリックすることでライブストリームを停止します。

Form Load起動時のイベント

private void Form1_Load( object sender, EventArgs e )
{
    if( !icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml") )
    {
        MessageBox.Show("No device was selected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
        this.Close();
        return;
    }

    // カメラの設定した解像度に合わせて表示画面を変更
    icImagingControl1.LiveDisplayDefault = false;
    icImagingControl1.LiveDisplaySize = icImagingControl1.Size;

    cmdStop.Enabled = false;

    icImagingControl1.LiveDisplay = false;
    // バッファの量を指定
    InitSink();
}

// フォームのサイズを変更した時にもカメラの設定した解像度に合わせて表示画面を変更
private void Form1_SizeChanged( object sender, EventArgs e )
{
    if( icImagingControl1.DeviceValid )
    {
        icImagingControl1.LiveDisplaySize = icImagingControl1.Size;
    }
}
// バッファの量を指定
private void InitSink()
{
    icImagingControl1.Sink = new FrameQueueSink(ShowBuffer, MediaSubtypes.RGB32, 5);
}
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
            MessageBox.Show("No device was selected.", "Display Buffer Sample")
            Me.Close()
            Exit Sub
        End If
    End If


    'カメラの設定した解像度に合わせて表示画面を変更
    IcImagingControl1.LiveDisplayDefault = False
    IcImagingControl1.LiveDisplaySize = IcImagingControl1.Size

    cmdStop.Enabled = False

    IcImagingControl1.LiveDisplay = False

    'バッファの量を指定
    IcImagingControl1.Sink = New TIS.Imaging.FrameQueueSink(Function(img)
                                                                Return ShowImage(img)
                                                            End Function, New TIS.Imaging.FrameType(TIS.Imaging.MediaSubtypes.RGB32), 5)


End Sub

フォームロードするタイミングで最後に読み込んだデバイスの情報をxmlファイルから読み出します。
LiveDisplaySizeとWindowosFormnのサイズを一致させることで取得したイメージ全体をフォーム全体に表示することができます。
これはForm1_SizeChangedのイベントハンドラー(フォームのサイズを変更した際に起きるイベント)にも同様の処理を追加しています。
LiveDisplayを無効にすることで、コントロールウィンドウに変更されたバッファを表示することができます。

C#ではInitSinkではSinkを初期化しFrameQueueSinkを定義します。下記のように定義することで新しいフレーム毎にコールバックス関数としてShowBufferがコールされます。FrameQueueSinkはカメラから画像を受け取ると、入力キューからリングバッファを受け取り、画像データをコピーして出力キューに配置します。Sinkが画像を受け取った時点で入力キューがない場合、フレーム落ちします。Sinkがコピーしたフレーム数やドロップされたフレームの情報は下記をご覧ください。

デバイスの再接続方法とフレーム落ちの確認
IC Imaging Control Ver3.5(C#/VB.NET) サンプルプログラム


このSinkは、5フレームのQueueサイズを持ち、MediaSubtypes.RGB32イメージバッファのみ受け付けます。

FrameQueueSink クラス
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

コールバック関数の定義

private FrameQueuedResult ShowBuffer( IFrameQueueBuffer buffer )
{
    icImagingControl1.DisplayImageBuffer( buffer );
    return FrameQueuedResult.ReQueue;
}
Function ShowImage(img As TIS.Imaging.IFrameQueueBuffer)
    IcImagingControl1.DisplayImageBuffer(img)
    Return TIS.Imaging.FrameQueuedResult.ReQueue
End Function

フレームが入力され、出力キューにコピーされたあと、ShowBufferが毎回コールされます。コールバック実行中に次のフレームが出力キューに追加された場合は、コールバックが戻った直後に再度コールされます。
FrameQueuedResultは新しい画像が到着した際にコールされる関数オブジェクトで、IFrameQueueBufferを受け取ります。バッファカウントを保持するために、sinkに毎回キューされる必要があります。コールされるFrameQueueSinkの中で、ライブ画像を取得し続けるためにIFrameQueueBufferが自動的に再キューをえるためにFrameQueuedResult.ReQueueを返す必要があります。
ちなみにFrameQueuedResult.SkipReQueueにした場合にはIFrameQueueBufferを返さないので一度しかコールされずライブが更新されることはありません。

下記のAPIリファレンスマニュアルにもその他関数などの説明があります。

プログラマーズガイド:イベントを使ってバッファを表示させる
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

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

Copyright © ARGO Corporation. All Rights Reserved.