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_simple_property_cs_3.5.zip

実行結果

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

[Brightness]スライダー 明るさを調整します。
[Auto Brightness]チェックボックス 明るさを自動で調整します。
[Whitebalance Red]スライダー ホワイトバランス赤の色味を調整します。
[Whitebalance Blue]スライダー ホワイトバランス青の色味を調整します。
[Whitebalance Green]スライダー ホワイトバランス緑の色味を調整します。
[Auto Whitebalance]チェックボックス ホワイトバランスの赤、青、緑の色味を自動で調整します。
[One Push]ボタン ホワイトバランスの赤、青、緑の色味をワンショットすることで調整します。

VCDプロパティの宣言

private TIS.Imaging.VCDSwitchProperty _brightnessAuto;
private TIS.Imaging.VCDSwitchProperty _whitebalanceAuto;
private TIS.Imaging.VCDRangeProperty _brightnessRange;
private TIS.Imaging.VCDRangeProperty _whitebalanceBlueRange;
private TIS.Imaging.VCDRangeProperty _whitebalanceRedRange;
private TIS.Imaging.VCDRangeProperty _whitebalanceGreenRange;

プロパティを操作する為には適切な項目、要素、インターフェースを呼び出す必要があり、VCDGUIDsと呼ばれるプロパティを特定するための識別子を使います。VCDGUIDsの中にはElement、Interface、Property Itemが含まれています。
スライダーやチェックボックスで操作しやすくするためにSwitch、Rangeのインターフェイスをグローバルオブジェクトとして宣言します。
その他のインターフェースの一覧は下記にありますので、他のインターフェースを使用する場合にはご確認ください。

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;


    // 自動明るさの設定
    // 自動設定のためのスイッチインターフェースへのインターフェースを所得
    _brightnessAuto = icImagingControl1.VCDPropertyItems.Find<VCDSwitchProperty>( VCDGUIDs.VCDID_Brightness, VCDGUIDs.VCDElement_Auto );
    if( _brightnessAuto == null )
    {
        //このデバイスではAuto brightnessがサポートされていない
        BrightnessAutoCheckBox.Enabled = false;
    }
    else
    {
        _brightnessAuto.Switch = false;
    }

    // 明るさの設定
    // 値の設定のためのレンジインターフェースへのインターフェースを所得
    _brightnessRange = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>( VCDGUIDs.VCDID_Brightness, VCDGUIDs.VCDElement_Value );
    if( _brightnessRange == null )
    {
        BrightnessTrackBar.Enabled = false;
    }
    else
    {
      // _brightnessRangeインターフェースをBrightnessスライダーに割り当て
        BrightnessTrackBar.Enabled = true;
        BrightnessTrackBar.Minimum = _brightnessRange.RangeMin;
        BrightnessTrackBar.Maximum = _brightnessRange.RangeMax;
        BrightnessTrackBar.Value = _brightnessRange.Value;
        BrightnessTrackBar.TickFrequency = (BrightnessTrackBar.Maximum - BrightnessTrackBar.Minimum) / 10;
        BrightnessValueLabel.Text = BrightnessTrackBar.Value.ToString();
    }

    // 自動ホワイトバランスの設定
    // 自動設定のためのスイッチインターフェースへのインターフェースを所得
    _whitebalanceAuto = icImagingControl1.VCDPropertyItems.Find<VCDSwitchProperty>(VCDGUIDs.VCDID_WhiteBalance, VCDGUIDs.VCDElement_Auto);
    // _whitebalanceAutoインターフェースをAuto Whitebalanceチェックボックスに割り当て
    if (_whitebalanceAuto == null)
    {
        WhitebalanceCheckBox.Enabled = false;
        WhitebalanceOnePushButton.Enabled = false;
    }
    else
    { 
        _whitebalanceAuto.Switch = false;
    }

    // ホワイトバランス 青の設定
    _whitebalanceBlueRange = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>( VCDGUIDs.VCDID_WhiteBalance, VCDGUIDs.VCDElement_WhiteBalanceBlue );
    if( _whitebalanceBlueRange == null )
    {
        WhiteBalBlueTrackBar.Enabled = false;
    }
    else
    {
        WhiteBalBlueTrackBar.Enabled = true;
        WhiteBalBlueTrackBar.Minimum = _whitebalanceBlueRange.RangeMin;
        WhiteBalBlueTrackBar.Maximum = _whitebalanceBlueRange.RangeMax;
        WhiteBalBlueTrackBar.Value = _whitebalanceBlueRange.Value;
        WhiteBalBlueTrackBar.TickFrequency = (WhiteBalBlueTrackBar.Maximum - WhiteBalBlueTrackBar.Minimum) / 10;
        WhiteBalBlueLabel.Text = WhiteBalBlueTrackBar.Value.ToString();
    }

    // ホワイトバランス 赤の設定
    _whitebalanceRedRange = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>( VCDGUIDs.VCDID_WhiteBalance, VCDGUIDs.VCDElement_WhiteBalanceRed );
    if( _whitebalanceRedRange == null )
    {
        WhiteBalRedTrackBar.Enabled = false;
    }
    else
    {
        WhiteBalRedTrackBar.Enabled = false;
        WhiteBalRedTrackBar.Enabled = true;
        WhiteBalRedTrackBar.Minimum = _whitebalanceRedRange.RangeMin;
        WhiteBalRedTrackBar.Maximum = _whitebalanceRedRange.RangeMax;
        WhiteBalRedTrackBar.Value = _whitebalanceRedRange.Value;
        WhiteBalRedTrackBar.TickFrequency = (WhiteBalRedTrackBar.Maximum - WhiteBalRedTrackBar.Minimum) / 10;
        WhiteBalRedLabel.Text = WhiteBalRedTrackBar.Value.ToString();
    }

    // ホワイトバランス 緑の設定
    _whitebalanceGreenRange = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_WhiteBalance, VCDGUIDs.VCDElement_WhiteBalanceGreen);
    if (_whitebalanceGreenRange == null)
    {
        WhiteBalGreenTrackBar.Enabled = false;
    }
    else
    {
        WhiteBalGreenTrackBar.Enabled = false;
        WhiteBalGreenTrackBar.Enabled = true;
        WhiteBalGreenTrackBar.Minimum = _whitebalanceGreenRange.RangeMin;
        WhiteBalGreenTrackBar.Maximum = _whitebalanceGreenRange.RangeMax;
        WhiteBalGreenTrackBar.Value = _whitebalanceGreenRange.Value;
        WhiteBalGreenTrackBar.TickFrequency = (WhiteBalGreenTrackBar.Maximum - WhiteBalGreenTrackBar.Minimum) / 10;
        WhiteBalGreenLabel.Text = WhiteBalGreenTrackBar.Value.ToString();
    }

    // ライブストリーミング開始
    icImagingControl1.LiveStart();
}

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

コントローラ グローバル
オブジェクト
item識別子 element識別子 インターフェース
[Auto Brightness]
チェックボックス
_brightnessAuto VCDID_Brightness VCDElement_Value VCDSwitchProperty
[Brightness]
スライダー
_brightnessRange VCDID_Brightness VCDElement_Value VCDRangeProperty
[Whitebalance Red]
スライダー
_whitebalanceRedRange VCDID_WhiteBalance VCDElement_WhiteBalanceRed VCDRangeProperty
[Whitebalance Blue]
スライダー
_whitebalanceBlueRange VCDID_WhiteBalance VCDElement_WhiteBalanceBlue VCDRangeProperty
[Whitebalance Green]
スライダー
_whitebalanceGreenRange VCDID_WhiteBalance VCDElement_WhiteBalanceGreen VCDRangeProperty
[Auto Whitebalance]
チェックボックス
_whitebalanceAuto VCDID_WhiteBalance VCDElement_Auto VCDSwitchProperty
[One Push]ボタン whiteBalanceOnePush
(Private変数 後述)
VCDID_WhiteBalance VCDElement_OnePush VCDButtonProperty

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リファレンスマニュアル

明るさの調整(イベントハンドラ)

//Auto Brightnessチェックボックス(明るさの自動調整の有効化/無効化)
private void BrightnessAutoCheckBox_CheckedChanged( object sender, EventArgs e )
{
    _brightnessAuto.Switch = BrightnessAutoCheckBox.Checked;
    BrightnessTrackBar.Enabled = !BrightnessAutoCheckBox.Checked;
}

//Brightnessスライダー(明るさの自動調整の有効化/無効化)
private void BrightnessTrackBar_Scroll(object sender, EventArgs e)
{
    _brightnessRange.Value = BrightnessTrackBar.Value;
    BrightnessValueLabel.Text = _brightnessRange.Value.ToString();
}

イベントハンドラは上記の通りとなっております。冒頭で宣言した_brightnessAutoと_brightnessRangeをチェックボックス(BrightnessAutoCheckBox)とスライダー(BrightnessTrackBar)に割り当てるようにします。

ホワイトバランスの調整

 //Auto Whitebalanceチェックボックスにチェックを入れた時の処理( Whitebalanceの自動調整の有効化/無効化)
private void WhitebalanceCheckBox_CheckedChanged( object sender, EventArgs e )
{
    _whitebalanceAuto.Switch = WhitebalanceCheckBox.Checked;
    WhiteBalBlueTrackBar.Enabled = !WhitebalanceCheckBox.Checked;
    WhiteBalRedTrackBar.Enabled = !WhitebalanceCheckBox.Checked;
    WhiteBalGreenTrackBar.Enabled = !WhitebalanceCheckBox.Checked;

    WhiteBalBlueTrackBar.Value = _whitebalanceBlueRange.Value;
    WhiteBalRedTrackBar.Value = _whitebalanceRedRange.Value;
    WhiteBalGreenTrackBar.Value = _whitebalanceGreenRange.Value;
}

//Whitebalance Redスライダーを変更した時の処理
private void WhiteBalRedTrackBar_Scroll( object sender, EventArgs e )
{
    _whitebalanceRedRange.Value = WhiteBalRedTrackBar.Value;
    WhiteBalRedLabel.Text = _whitebalanceRedRange.Value.ToString();
}

//Whitebalance Blueスライダーを変更した時の処理
private void WhiteBalBlueTrackBar_Scroll( object sender, EventArgs e )
{
    _whitebalanceBlueRange.Value = WhiteBalBlueTrackBar.Value;
    WhiteBalBlueLabel.Text = _whitebalanceBlueRange.Value.ToString();
}

//Whitebalance Greenスライダーを変更した時の処理
private void WhiteBalGreenTrackBar_Scroll(object sender, EventArgs e)
{
    _whitebalanceGreenRange.Value = WhiteBalGreenTrackBar.Value;
    WhiteBalGreenLabel.Text = _whitebalanceGreenRange.Value.ToString();
}

グローバル変数で宣言したプロパティを調整するためにどのようにインターフェースを使うかはそれぞれのチェックボックスの変更時のイベントハンドラやスライダーの変更時のイベントハンドラと紐づける必要があります。イベントハンドラ内ではコントローラに対してグローバル変数で宣言したプロパティを割り当てるだけでコントローラによる制御ができるようになります。例えば、WhitebalanceCheckBox_CheckedChangedのチェックボックスを変更した時のイベントハンドラにはチェックボックスのValueプロパティにグローバル変数_whitebalanceAuto割り当てるだけでデバイスとコントローラの同期をとることが可能です。

//One Pushボタンをクリックした時の処理
private void WhitebalanceOnePushButton_Click( object sender, EventArgs e )
{
    //変数whiteBalanceOnePushにホワイトバランスのワンプッシュ機能を割り当て
    var whiteBalanceOnePush = icImagingControl1.VCDPropertyItems.Find<VCDButtonProperty>( VCDGUIDs.VCDID_WhiteBalance, VCDGUIDs.VCDElement_OnePush );
    if( whiteBalanceOnePush != null )
    {

        //Pushメソッドを呼び出すだけでワンプッシュでホワイトバランスを調整する
       whiteBalanceOnePush.Push();
        //ホワイトバランスのBlue,Red,Greenスライダーに反映する
        WhiteBalBlueTrackBar.Value = _whitebalanceBlueRange.Value;
        WhiteBalRedTrackBar.Value = _whitebalanceRedRange.Value;
        WhiteBalGreenTrackBar.Value = _whitebalanceGreenRange.Value;

    }
}

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

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

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

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

Copyright © ARGO Corporation. All Rights Reserved.