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

動画保存(MediaStreamSink)

概要

ライブストリームをAVIファイルとして保存する方法を説明します。 ここではAVIコンプレッサとMediaStreamContainer(ビデオフォーマット)のコレクションへのアクセスから録画するための手順について解説しています。

サンプルプログラム

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

実行結果

メイン画面

Capturing a Video File メイン画面

//起動したときに発火するイベント
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.LiveStart();
}

//”Start Live”ボタンをクリック時に発火するイベント
private void btnStartLive_Click(object sender, EventArgs e)
{
    //ライブストリーム開始
    icImagingControl1.LiveStart();
}

//”Start Stop”ボタンをクリック時に発火するイベント
private void btnStopLive_Click(object sender, EventArgs e)
{
    //ライブストリーム停止
    icImagingControl1.LiveStop();
}

//”Capture Video”ボタンをクリック時に発火するイベント
private void btnCaptureVideo_Click(object sender, EventArgs e)
{
    //下記のAVI録画ダイアログをダイアログとしてオープンする
    SaveVideoForm frm = new SaveVideoForm(icImagingControl1);
    frm.ShowDialog();
}

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
            Close()
            Exit Sub
        End If

    End If

    IcImagingControl1.LiveStart()

End Sub

Private Sub btnStartLive_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartLive.Click
    IcImagingControl1.LiveStart()
End Sub

Private Sub btnStopLive_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStopLive.Click
    IcImagingControl1.LiveStop()
End Sub

Private Sub btnCaptureVideo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCaptureVideo.Click
    Dim frm As New SaveVideoForm(IcImagingControl1)
    frm.ShowDialog()
End Sub

メイン画面は非常にシンプルな作りでライブストリームの開始、停止、AVI録画ダイアログの表示を操作するためのボタンを設置しているのみです。

AVI録画ダイアログ

Capturing a Video File AVI録画ダイアログ

グローバル変数を宣言

private TIS.Imaging.ICImagingControl _imagingControl;
private TIS.Imaging.BaseSink _oldSink;
private bool _oldLiveModeSetting;
private TIS.Imaging.MediaStreamSink _sink;
Private m_ImagingControl As TIS.Imaging.ICImagingControl
Private m_OldSink As TIS.Imaging.BaseSink
Private m_OldLiveMode As Boolean
Private m_Sink As TIS.Imaging.MediaStreamSink

Formをロードした時に各コントローラーを初期化

//Formをロードした時に発火するイベント
private void SaveVideoForm_Load(object sender, EventArgs e)
{
    //File AVIのコンボボックスに利用可能な全MediaStreamContainer(ビデオフォーマット)を含むリストを追加
    cboMediaStreamContainer.DataSource = TIS.Imaging.MediaStreamContainer.MediaStreamContainers;
    //テクストボックス内にファイル名を記載
    txtFileName.Text = System.IO.Path.ChangeExtension("video.avi", CurrentMediaStreamContainer.PreferredFileExtension);
    //フォームロード時は録画はストップした状態なので、"Stop Capture"ボタンを無効化
    btnStopCapture.Enabled = false;
    //AVIコンプレッサ(ビデオコーデック)のコレクションを追加する(下記参照)
    fillCodecListItems();
}

//Video CodecのコンボボックスにAVIコンプレッサ(ビデオコーデック)のコレクションを追加する関数
private void fillCodecListItems()
{
    var cont = CurrentMediaStreamContainer;
    if (cont != null){
        cboVideoCodec.DataSource = TIS.Imaging.AviCompressor.AviCompressors.Where(p => cont.IsCodecSupported(p)).ToList();
    }else{
        cboVideoCodec.DataSource = TIS.Imaging.AviCompressor.AviCompressors;
    }
}

Private Sub SaveVideoForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    cboMediaStreamContainer.DataSource = TIS.Imaging.MediaStreamContainer.MediaStreamContainers
    cboVideoCodec.DataSource = TIS.Imaging.AviCompressor.AviCompressors

    txtFileName.Text = System.IO.Path.ChangeExtension("video.avi", CurrentMediaStreamContainer.PreferredFileExtension)

    btnStopCapture.Enabled = False
End Sub

Formをロードした時に発火するときに、設置してあるコンボボックスやボタンなどのコントローラーを初期化しています。
File AVIのコンボボックスには利用可能な全MediaStreamContainerを、Video CodecのコンボボックスにAVIコンプレッサ(ビデオコーデック)のコレクションを追加し、コンボボックスから選択できるようにしています。

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

//"Start Capture"ボタンをクリックした時に発火するイベント
private void btnStartCapture_Click(object sender, EventArgs e)
{
     //AVI録画を行うに際してコーデックを選択し、MediaStreamSinkを作成
    _sink = new TIS.Imaging.MediaStreamSink( CurrentMediaStreamContainer, CurrentVideoCodec, txtFileName.Text );
     //シンクの"running"状態の設定
    _sink.SinkModeRunning = !chkPause.Checked;
     //LiveStartメソッドが開始されたかどうかを取得
    _oldLiveModeSetting = _imagingControl.LiveVideoRunning;
     //使用しているsinkの状態を保存
    _oldSink = _imagingControl.Sink;

     //ライブストリームを停止
    _imagingControl.LiveStop();
     //MediaStreamSinkを割り当て
    _imagingControl.Sink = _sink;
     //ライブストリームを開始(録画を開始)
    _imagingControl.LiveStart();

    btnStartCapture.Enabled = false;
    btnStopCapture.Enabled = true;
    btnClose.Enabled = false;
}

Private Sub btnStartCapture_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartCapture.Click
    m_Sink = New TIS.Imaging.MediaStreamSink
    m_Sink.StreamContainer = CurrentMediaStreamContainer
    m_Sink.Codec = CurrentVideoCodec
    m_Sink.Filename = txtFileName.Text
    m_Sink.SinkModeRunning = Not chkPause.Checked

    m_OldLiveMode = m_ImagingControl.LiveVideoRunning
    m_OldSink = m_ImagingControl.Sink

    m_ImagingControl.LiveStop()

    m_ImagingControl.Sink = m_Sink

    m_ImagingControl.LiveStart()

    btnStartCapture.Enabled = False
    btnStopCapture.Enabled = True
    btnClose.Enabled = False
End Sub

AVI録画を行うコーデックをためにMediaStreamSinkを作成します。その後、シンクの"running"状態の設定します。
Trueにすることで、動画保存やフレーム画像の取得を遅延なく開始することができます。 作成したMediaStreamSinkシンクを設定し、ライブストリームを開始することで録画をすることができます。

[Pause]チェックボックスを変更

private void chkPause_CheckedChanged(object sender, EventArgs e){
    if (_sink != null){
        _sink.SinkModeRunning = !chkPause.Checked;
    }
}
Private Sub chkPause_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPause.CheckedChanged
    If Not m_Sink Is Nothing Then
        m_Sink.SinkModeRunning = Not chkPause.Checked
    End If
End Sub

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

ライブストリームを圧縮して保存する処理はCPUに高い負荷をかけることになる為、全てのコーデックで最大の解像度、フレームレートが保証されるというわけではありません。

Capturing a Video File Pauseチェックボックスを変更

IC Imaging Control3.5からWMVおよびMP4MediaStreamContainerインスタンスを追加されています。 これにVideo Codecも「MediaFoundation h.264」「MediaFoundation h.265/HEVC」にも対応しており、 「Use Hardware Acceleration」にチェックを入れることによって特定のCPU集約型処理をGPUにオフロードすることで、ビデオのデコードをハードウェアアクセラレーションを利用して実行できるようになります。

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

プログラマーズガイド:動画をAVIファイルとして保存する
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

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

Copyright © ARGO Corporation. All Rights Reserved.