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

コントラストの強調 - Part 2

概要

Part1を発展させ、カスタマイズしたコントロールによりフレームフィルタのパラメータを設定する方法を示しています。

サンプルプログラム

Software IC Imaging Control 3.5, Visual Studio™ 2019
サンプル(C#) contrast_enhancement2_cs_3.5.zip
サンプル(VB.NET) contrast_enhancement2_vb_3.5.zip
関連ファイル contrast_enhancement_vc7_framefilter_3.5.zip
※ダイアログ画面に関してプラットフォームはx86のみ対応

サンプルツールの外観

"Contrast Enhancement" フレームフィルタの VC++ .NET プロジェクトも上記よりダウンロードが可能ですが、このフィルタはサンプルに含まれており、また部品として使用されているので、使用についてはその内容の理解は必要ありません。

このフィルタはそのヒストグラムを広げる働きをします。フィルタに上限値と下限値を設定し、その範囲の輝度値を広げて表示します。下限値よりも暗いピクセルはすべて輝度値0に、上限値よりも明るいピクセルはすべて輝度値255となります。

private TIS.Imaging.FrameFilter filter;
Dim filter As TIS.Imaging.FrameFilter

タイプTIS.Imaging.FrameFilterの変数filterはクラスForm1の中で宣言する必要があります。この変数はフレームフィルターを含み、その接続に使用されます。

private void Form1_Load(object sender, System.EventArgs e)
{
    icImagingControl1.ShowDeviceSettingsDialog();
    if (!icImagingControl1.DeviceValid)
        return;

    filter = icImagingControl1.FrameFilterCreate("ContrastEnhancement", "");
    // ICのデバイスバスにフレームフィルタを挿入します
    icImagingControl1.DeviceFrameFilters.Add(filter);
    // フィルタをEnableにします
    cbEnable.Checked = true;
    // Enableチェックボックスを初期化します
    filter.SetBoolParameter("Enable", cbEnable.Checked);
    InitControls();
    UpdateControls();
    icImagingControl1.LiveStart();
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    IcImagingControl1.ShowDeviceSettingsDialog()
    If Not IcImagingControl1.DeviceValid Then
        'Unload(Me)
        Exit Sub
    End If
    filter = IcImagingControl1.FrameFilterCreate("ContrastEnhancement", "")
    ' ICのデバイスバスにフレームフィルタを挿入します
    IcImagingControl1.DeviceFrameFilters.Add(Filter)
    ' Enableチェックボックスを初期化します
    filter.SetBoolParameter("Enable", True)
    InitControls()
    UpdateControls()
    IcImagingControl1.LiveStart()
End Sub

フレームフィルタの上限値と下限値は2つのスクロールバー(sldLowerBound, sldUpperBound)で設定することができます。プログラムのメインフォームでは、以下で定義される2つの関数をコールしています。

private void InitControls()
{
    sldLowerBound.Minimum = 0;
    sldLowerBound.Maximum = 255;
    sldUpperBound.Minimum = 0;
    sldUpperBound.Maximum = 255;
}
Private Sub InitControls()
    sldLowerBound.Minimum = 0
    sldLowerBound.Maximum = 255
    sldUpperBound.Minimum = 0
    sldUpperBound.Maximum = 255
End Sub

関数InitControlsでスクロールバーsldLowerBoundとsldUpperBoundの最小値、最大値をそれぞれ初期化します。

private void UpdateControls()
{
    if (filter.GetBoolParameter("Enable"))
        cbEnable.Checked = true;
    else
        cbEnable.Checked = false;

    sldLowerBound.Value = filter.GetIntParameter("Lower Bound");
    txLowerBound.Text = sldLowerBound.Value.ToString();
    sldUpperBound.Value = filter.GetIntParameter("Upper Bound");
    txUpperBound.Text = sldUpperBound.Value.ToString();
}
Private Sub UpdateControls()
    If filter.GetBoolParameter("Enable") Then
        cbEnable.Checked = True
    Else
        cbEnable.Checked = False
    End If
    sldLowerBound.Value = filter.GetIntParameter("Lower Bound")
    txLowerBound.Text = sldLowerBound.Value
    sldUpperBound.Value = filter.GetIntParameter("Upper Bound")
    txUpperBound.Text = sldUpperBound.Value
End Sub 

関数UpdateControlsはフィルタのパラメータ "Enable", "Lower Bound", "Upper Bound"をそれぞれチェックボックスcbEnable、スクロールバーsldLowerBoundとsldUpperBoundに割り当てます。

private void sldLowerBound_Scroll(object sender, System.EventArgs e)
{
    if (sldLowerBound.Value >= sldUpperBound.Value)
        sldLowerBound.Value = sldUpperBound.Value - 1;

    filter.SetIntParameter("Lower Bound", sldLowerBound.Value);
    txLowerBound.Text = sldLowerBound.Value.ToString();
}

private void sldUpperBound_Scroll(object sender, System.EventArgs e)
{
    if (sldUpperBound.Value <= sldLowerBound.Value)
        sldUpperBound.Value = sldLowerBound.Value + 1;

    filter.SetIntParameter("Upper Bound", sldUpperBound.Value);
    txUpperBound.Text = sldUpperBound.Value.ToString();
  }
Private Overloads Sub sldLowerBound_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sldLowerBound.Scroll
    If sldLowerBound.Value >= sldUpperBound.Value Then
        sldLowerBound.Value = sldUpperBound.Value - 1
    End If
    filter.SetIntParameter("Lower Bound", sldLowerBound.Value)
    txLowerBound.Text = sldLowerBound.Value
End Sub

Private Overloads Sub sldUpperBound_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sldUpperBound.Scroll
    If sldUpperBound.Value <= sldLowerBound.Value Then
        sldUpperBound.Value = sldLowerBound.Value + 1
    End If
    filter.SetIntParameter("Upper Bound", sldUpperBound.Value)
    txUpperBound.Text = sldUpperBound.Value
End Sub

スクロールバーsldLowerBoundのイベントハンドラーではその値がsldUpperBoundの値と同じか、それよりも小さい事を確認しています。その後、その値はパラメータが"Lower Bound"に適用され、そのテキストも更新されます。スクロールバーsldUpperBound のイベントハンドラーについても同様です。

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

Copyright © ARGO Corporation. All Rights Reserved.