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

静止画とAVI動画保存

概要

動画ファイルを作成しながら、静止画を撮影する方法を説明します。通常MediastreamSinkを使用している場合、画像保存のためのコールバックを並列に持つことはできません。別スレッドにて画像保存を行うため、FrameFilterを使用しています。IC Imaging ControlではFrameFilterだけが二つのシンクを制御する唯一の方法です。

サンプルプログラム

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

サンプルツールの外観

グローバル変数を宣言

private FrameFilter _saveImageFrameFilter;

通常ICImagingControlでは動画保存と静止画保存を同時に行う事はできませんが、このサンプルではJPEGファイル保存を行う特別なフレームフィルタを使用する事で動画保存しながら静止画保存できるようになっています。FrameFilterクラスの_saveImageFrameFilterを定義し、静止画保存フィルタへのアクセスできるようにしています。

Formをロード(各コントローラーを初期化、フィルタの読み込み)

private MediaStreamSink _aviSink;
private void Form1_Load(object sender, EventArgs e)
{
    _aviSink = new MediaStreamSink();
    //
    foreach (AviCompressor codec in AviCompressor.AviCompressors)
    {
        comboBox1.Items.Add(codec);
        if (codec.Name == "DV Video Encoder")
        {
            _aviSink.Codec = codec;
            comboBox1.SelectedIndex = comboBox1.FindStringExact("DV Video Encoder");

        }
    }

    _saveImageFrameFilter = FrameFilter.Create("Save Image");
    if (_saveImageFrameFilter == null)
    {
        MessageBox.Show($"Failed to load the \"Save Image\" frame filter!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
    icImagingControl1.DeviceFrameFilters.Add(_saveImageFrameFilter);

    cboMediaStreamContainer.DataSource = TIS.Imaging.MediaStreamContainer.MediaStreamContainers;

    try
    {
        icImagingControl1.LoadDeviceStateFromFile("device.xml", true);
        _aviSink.Filename = System.IO.Path.ChangeExtension($"{icImagingControl1.Device.ToString()}.avi", CurrentMediaStreamContainer.PreferredFileExtension);
    }
    catch
    {
        // xmlファイルの読み込み、接続したカメラを開くのに失敗した時の処理
    }

    if (m_bFitImageToWindow)
    {
        // ライブ表示のサイズをフォームのサイズに調整する
        icImagingControl1.LiveDisplayDefault = false;
        icImagingControl1.LiveDisplaySize = icImagingControl1.Size;
    }

    //GUI上のボタンの有効化/無効化を制御
    UpdateControls();

}

MediaStreamSinkのシンクを使って録画をするため、【_aviSink = new MediaStreamSink】で録画するためのシンクを宣言します。File AVIのコンボボックスには利用可能な全MediaStreamContainerを、Video CodecのコンボボックスにAVIコンプレッサ(ビデオコーデック)のコレクションを追加し、コンボボックスから選択できるようにしています。

これとは別に、ICImagingControlの追加機能として静止画保存するフィルタを使うため、アプリケーションパスにある"Save Image" フィルタ を【_saveImageFrameFilter = FrameFilter.Create("Save Image")】で読み込みます。この"Save Image" フィルタはC++にて作成した静止画保存するライブラリで、アプリケーションと同じフォルダ内にあるSaveImageFrameFilter64.ftf(32bitの場合、SaveImageFrameFilter32.ftf)を参照しています。ftfファイルを読み込み後、DeviceFrameFiltersのコレクションに"Save Image" フィルタを追加することで、静止画保存の機能をICImagingControlに実装することができます。

[Start Live]ボタンをクリック(録画開始)


private void StartLiveVideo()
{
    _aviSink=new TIS.Imaging.MediaStreamSink(CurrentMediaStreamContainer, CurrentVideoCodec, System.IO.Path.ChangeExtension($"{icImagingControl1.Device.ToString()}.avi", CurrentMediaStreamContainer.PreferredFileExtension) );
    _aviSink.SinkModeRunning = !checkBoxAVIPause.Checked;
    icImagingControl1.Sink = _aviSink;
    icImagingControl1.LiveStart();
    //GUI上のボタンの有効化/無効化を制御
    UpdateControls();
}

ライブ開始時にリングバッファに取りためる数を変数_FramesToCapture(フレームレート×3)で計算しておく。

[AVI Pause]チェックボックス


private void checkBoxAVIPause_CheckedChanged(object sender, EventArgs e)
{
    icImagingControl1.Sink.SinkModeRunning = !icImagingControl1.Sink.SinkModeRunning;
}

[Pause]ボタンはチェックボックスをクリックした時には、SinkModeRunningをFalseにすることで画像ストリームのシンクパスのみが停止され、録画を一時停止することができます。ライブ画像は表示されますが、ビデオファイルとして保存はされません。SinkModeRunningをTrueにすることで、前に作成されたAVIファイルが引き続き使用されます。

[Snap]ボタンをクリックしたとき

private void buttonSnap_Click(object sender, EventArgs e)
{
    if(_saveImageFrameFilter != null && icImagingControl1.DeviceValid && icImagingControl1.LiveVideoRunning)
    {
        imageCounter++;
        string imageFileName = String.Format("Image{0}.jpg",imageCounter);
        _saveImageFrameFilter.SetStringParameter("ImageName", imageFileName);
    }
}

アプリケーションフォームのボタンによって静止画像を保存できるようにするため、ボタンのハンドラーbuttonSnap_Clickを追加します。
Form1_Loadのイベントハンドラーで静止画保存がデバイスフレームフィルタ_saveImageFrameFilterとして設定されています。_saveImageFrameFilterを呼び出すにはSetStringParameterを使用します。第一引数にはパラメータ "ImageName"を、第二引数にはファイルのパスを指定します。_saveImageFrameFilter が別スレッドでイメージを保存することができるので、動画ファイルをとりながら静止画保存することができます。

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

Copyright © ARGO Corporation. All Rights Reserved.