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プロパティ:オートフォーカス編

概要

フォーカス調整に関するVCDプロパティの実装方法について説明します。

サンプルプログラム

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

実行結果

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

フォーカス値スライダー フォーカス値を調整します。
[ワンプッシュ]ボタン ワンプッシュでフォーカスを自動調整します。
[オートフォーカス最大値]スライダー ワンプッシュボタンをクリックしたときにフォーカス値を設定できる最大の数値を指定します。
[オートフォーカス最小値]スライダー ワンプッシュボタンをクリックしたときにフォーカス値を設定できる最小の数値を指定します。
[フォーカスROI有効化]チェックボックス ホワイトバランスの赤、青、緑の色味を自動で調整します。
[Auto Roi Left]スライダー オートフォーカスでフォーカスを合わせる範囲のLeftの座標位置を指定します。
[Auto Roi Right]スライダー オートフォーカスでフォーカスを合わせる範囲のRightの座標位置を指定します。
[Auto Roi Top]スライダー オートフォーカスでフォーカスを合わせる範囲のTopの座標位置を指定します。
[Auto Roi Bottom]チェックボックス オートフォーカスでフォーカスを合わせる範囲のBottomの座標位置を指定します。

VCDプロパティの宣言

private TIS.Imaging.VCDSwitchProperty _autoRoiEnable;
private TIS.Imaging.VCDRangeProperty _focusValue;
private TIS.Imaging.VCDRangeProperty _focusMaxValue;
private TIS.Imaging.VCDRangeProperty _focusMinValue;
private TIS.Imaging.VCDRangeProperty _autoRoiRight;
private TIS.Imaging.VCDRangeProperty _autoRoiLeft;
private TIS.Imaging.VCDRangeProperty _autoRoiTop;
private TIS.Imaging.VCDRangeProperty _autoRoiBottom;

IC Imaging ControlではTheImagingSource社のデバイスの機能にアクセスするためにVCDプロパティと呼ばれるクラスを用意しています。
ここではVCDプロパティの簡単な例としてAutoFocusの実装方法について説明します。
VCDプロパティの設定方法については下記をご覧ください。

constants.Standard Interface Identifier (標準インターフェース識別子)
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

初期設定

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;
    }


    //カメラから出力された映像をIC Imaging Contorolのコントロール表示サイズにする
    icImagingControl1.LiveDisplayDefault = false;
    icImagingControl1.LiveDisplaySize = icImagingControl1.Size;



    //フォーカス値
    _focusValue = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_Focus, VCDGUIDs.VCDElement_Value);
    if( _focusValue == null )
    {
      FocusValueTrackBar.Enabled = false;
    }
    else
    {
      FocusValueTrackBar.Enabled = true;
      FocusValueTrackBar.Minimum = _focusValue.RangeMin;
      FocusValueTrackBar.Maximum = _focusValue.RangeMax;
      FocusValueTrackBar.Value = _focusValue.Value;
      FocusValueTrackBar.TickFrequency = (FocusValueTrackBar.Maximum - FocusValueTrackBar.Minimum) / 10;
      FocusValueValueLabel.Text = FocusValueTrackBar.Value.ToString();
    }
    //フォーカス最小値
    _focusMinValue = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_Focus, VCDGUIDs.VCDElement_AutoMinValue);
    if (_focusMinValue == null)
    {
      FocusAutoMinValueTrackBar.Enabled = false;
    }
    else
    {
      FocusAutoMinValueTrackBar.Enabled = true;
      FocusAutoMinValueTrackBar.Minimum = _focusMinValue.RangeMin;
      FocusAutoMinValueTrackBar.Maximum = _focusMinValue.RangeMax;
      FocusAutoMinValueTrackBar.Value = _focusMinValue.Value;
      FocusAutoMinValueTrackBar.TickFrequency = (FocusAutoMinValueTrackBar.Maximum - FocusAutoMinValueTrackBar.Minimum) / 10;
      FocusAutoMinValueLabel.Text = _focusMinValue.Value.ToString();
    }

    //フォーカス最大値
    _focusMaxValue = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_Focus, VCDGUIDs.VCDElement_AutoMaxValue);
    if (_focusMaxValue == null)
    {
      FocusAutoMaxValuetrackBar.Enabled = false;
    }
    else
    {
      FocusAutoMaxValuetrackBar.Enabled = true;
      FocusAutoMaxValuetrackBar.Minimum = _focusMaxValue.RangeMin;
      FocusAutoMaxValuetrackBar.Maximum = _focusMaxValue.RangeMax;
      FocusAutoMaxValuetrackBar.Value = _focusMaxValue.Value;
      FocusAutoMaxValuetrackBar.TickFrequency = (FocusAutoMaxValuetrackBar.Maximum - FocusAutoMaxValuetrackBar.Minimum) / 10;
      FocusAutoMaxValueLabel.Text = _focusMaxValue.Value.ToString();
    }
    //ROI機能の有効化の設定
    _autoRoiEnable = icImagingControl1.VCDPropertyItems.Find<VCDSwitchProperty>(VCDGUIDs.VCDID_Focus, VCDGUIDs.VCDElement_AutoRoiEnable);
    if (_autoRoiEnable == null)
    {
      AutoRoiEnableCheckBox.Enabled = false;
      AutoFocusOnePushButton.Enabled = false;
    }
    else
    {
      _autoRoiEnable.Switch = false;
    }

    //オートフォーカス Right
    _autoRoiRight = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>( VCDGUIDs.VCDID_Focus, VCDGUIDs.VCDElement_AutoRoiRight );
    if( _autoRoiRight == null )
    {
      AutoRoiRightTrackBar.Enabled = false;
    }
    else
    {
      AutoRoiRightTrackBar.Enabled = true;
      AutoRoiRightTrackBar.Minimum = _autoRoiRight.RangeMin;
      AutoRoiRightTrackBar.Maximum = _autoRoiRight.RangeMax;
      AutoRoiRightTrackBar.Value = _autoRoiRight.Value;
      AutoRoiRightTrackBar.TickFrequency = (AutoRoiRightTrackBar.Maximum - AutoRoiRightTrackBar.Minimum) / 10;
      AutoRoiRightLabel.Text = _autoRoiRight.Value.ToString();
    }

    // オートフォーカス Left
    _autoRoiLeft = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_Focus, VCDGUIDs.VCDElement_AutoRoiLeft);
    if(_autoRoiLeft == null )
    {
      AutoRoiLeftTrackBar.Enabled = false;
    }
    else
    {
      AutoRoiLeftTrackBar.Enabled = false;
      AutoRoiLeftTrackBar.Enabled = true;
      AutoRoiLeftTrackBar.Minimum = _autoRoiLeft.RangeMin;
      AutoRoiLeftTrackBar.Maximum = _autoRoiLeft.RangeMax;
      AutoRoiLeftTrackBar.Value = _autoRoiLeft.Value;
      AutoRoiLeftTrackBar.TickFrequency = (AutoRoiLeftTrackBar.Maximum - AutoRoiLeftTrackBar.Minimum) / 10;
      AutoRoiLeftLabel.Text = _autoRoiLeft.Value.ToString();
    }

    //オートフォーカス Top
    _autoRoiTop = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_Focus, VCDGUIDs.VCDElement_AutoRoiTop);
    if (_autoRoiTop == null)
    {
      AutoRoiTopTrackBar.Enabled = false;
    }
    else
    {
      AutoRoiTopTrackBar.Enabled = false;
      AutoRoiTopTrackBar.Enabled = true;
      AutoRoiTopTrackBar.Minimum = _autoRoiTop.RangeMin;
      AutoRoiTopTrackBar.Maximum = _autoRoiTop.RangeMax;
      if (_autoRoiTop.Value > _autoRoiTop.RangeMax) _autoRoiTop.Value = _autoRoiTop.RangeMax;
      if (_autoRoiTop.Value < _autoRoiTop.RangeMin) _autoRoiTop.Value = _autoRoiTop.RangeMin;


      AutoRoiTopTrackBar.Value = _autoRoiTop.Value;
      AutoRoiTopTrackBar.TickFrequency = (AutoRoiTopTrackBar.Maximum - AutoRoiTopTrackBar.Minimum) / 10;
      AutoRoiTopLabel.Text = _autoRoiTop.Value.ToString();
    }

    //オートフォーカス Bottom
    _autoRoiBottom = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_Focus, VCDGUIDs.VCDElement_AutoRoiBottom);
    if (_autoRoiBottom == null)
    {
      AutoRoiBottomTrackBar.Enabled = false;
    }
    else
    {
      AutoRoiBottomTrackBar.Enabled = false;
      AutoRoiBottomTrackBar.Enabled = true;
      AutoRoiBottomTrackBar.Minimum = _autoRoiBottom.RangeMin;
      AutoRoiBottomTrackBar.Maximum = _autoRoiBottom.RangeMax;
      AutoRoiBottomTrackBar.Value = _autoRoiBottom.Value;
      AutoRoiBottomTrackBar.TickFrequency = (AutoRoiBottomTrackBar.Maximum - AutoRoiBottomTrackBar.Minimum) / 10;
      AutoRoiBottomLabel.Text = _autoRoiBottom.Value.ToString();
    }
    AutoRoiRightTrackBar.Enabled = AutoRoiEnableCheckBox.Checked;
    AutoRoiLeftTrackBar.Enabled = AutoRoiEnableCheckBox.Checked;
    AutoRoiTopTrackBar.Enabled = AutoRoiEnableCheckBox.Checked;
    AutoRoiBottomTrackBar.Enabled = AutoRoiEnableCheckBox.Checked;
    // ライブストリーミング開始
    icImagingControl1.LiveStart();
}

デバイスを選択後、VCDPropertyItems.Findメソッドを使って下記のitem識別子とelement識別子を引数に割り当てることによりVCDPropertyInterfaceを取得できます。

コントローラ グローバル
オブジェクト
item識別子 element識別子 インターフェース
[フォーカス値]スライダー _focusValue VCDID_Focus VCDElement_Value VCDRangeProperty
[ワンプッシュ]ボタン autoFocusOnePush VCDID_Focus VCDElement_OnePush VCDButtonProperty
[オートフォーカス]
最大値スライダー
_focusMaxValue VCDID_Focus VCDElement_AutoMaxValue VCDRangeProperty
[オートフォーカス]
最小値スライダー
_focusMinValue VCDID_Focus VCDElement_AutoMinValue VCDRangeProperty
[フォーカスROI有効化]
チェックボックス
_autoRoiEnable VCDID_Focus VCDElement_AutoRoiEnable VCDSwitchProperty
[Auto Roi Left]
スライダー
_autoRoiLeft VCDID_Focus VCDElement_AutoRoiLeft VCDRangeProperty
[Auto Roi Right]
スライダー
_autoRoiRight VCDID_Focus VCDElement_AutoRoiRight VCDRangeProperty
[Auto Roi Top]
スライダー
_autoRoiTop VCDID_Focus VCDElement_AutoRoiTop VCDRangeProperty
[Auto Roi Bottom]
チェックボックス
_autoRoiBottom VCDID_Focus VCDElement_AutoRoiBottom VCDRangeProperty

item識別子は下記をご覧ください。

constants.Standard Property Item Identifier
(標準プロパティアイテム識別子)

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

element識別子は下記をご覧ください

constants.Standard Element Identifier (標準エレメント識別子)
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

スライダーのイベントハンドラ

private void FocusValueTrackBar_Scroll(object sender, EventArgs e)
{
    _focusValue.Value = FocusValueTrackBar.Value;
    FocusValueValueLabel.Text = _focusValue.Value.ToString();
}

グローバル変数で宣言したプロパティを調整するためにどのようにインターフェースを使うかはスライダーの変更時のイベントハンドラと紐づける必要があります。イベントハンドラ内ではコントローラに対してグローバル変数で宣言したプロパティを割り当てるだけでコントローラによる制御ができるようになります。ここでは冒頭で宣言した変数(_focusValue)をスライダー(FocusValueTrackBar)に割り当てるようにします。_focusValueを割り当てるだけでデバイスとコントローラの同期をとることが可能です。

[ワンプッシュ]ボタン(イベントハンドラ)

private void AutoFocusOnePushButton_Click( object sender, EventArgs e )
{
    //変数autoFocusOnePush にオートフォーカスのワンプッシュ機能を割り当て
    var autoFocusOnePush = icImagingControl1.VCDPropertyItems.Find<VCDButtonProperty>( VCDGUIDs.VCDID_Focus, VCDGUIDs.VCDElement_OnePush );
    if(autoFocusOnePush != null )
    {
    
      autoFocusOnePush.Push();

        AutoFocusOnePushButton.Enabled =false;
        //ワンプッシュボタンをクリックしたときにフォーカスの値を反映する
        while (true){

            int oldvalue = _focusValue.Value;
            System.Threading.Thread.Sleep(1000);
            FocusValueTrackBar.Value = _focusValue.Value;
            FocusValueValueLabel.Text = _focusValue.Value.ToString();

            if (oldvalue == _focusValue.Value)
            {
                AutoFocusOnePushButton.Enabled = true;
                break;
            }
        }

    }
}

グローバル変数を宣言を必要としない(関数をまたがないような処理の場合)VCDButtonPropertyのようなインターフェースであれば、上記のようにイベントハンドラ内で変数をセットし割り当てるだけで簡単にメソッドを呼び出すことができます。

プログラマーズガイド:VCDプロパティの基本機能
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

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

Copyright © ARGO Corporation. All Rights Reserved.