IC Imaging Control (Python)

  • サンプルプログラムトップページ
  • デバイスのオープンとハンドリング
    • デバイスを開く
    • ダイアログボックスを使用してデバイスを開く
    • デバイスプロパティ設定の保存と復元
    • プロパティの設定方法
    • 接続しているカメラ一覧を表示
    • ROIの設定方法
    • オートフォーカスで焦点を調整する範囲を指定
    • デバイスロストの検出と再接続方法
  • イメージの取得
    • 8bit静止画保存
    • 16bit静止画保存
    • Enterキーを押下したときに画像保存
    • メモリーレコーディング
    • AVIファイル保存
  • 画像処理
    • コールバック関数の設定方法(OpenCVで二値化)
    • OpenCVで画像処理して表示する方法
    • ソフトウェアトリガー・外部トリガーの使用方法
    • ステレオカメラで表示
    • 2つのカメラで取得した画像の輝度値を平均してバーに表示する
  • IC Imaging Control3.5(pythonnet編)
    • Qtを使ったデモアプリ(pythonnet編)
    • カメラで取得した画像の輝度値を平均してバーに表示する
      (pythonnet編)
    • 動画保存(MediaStreamSink コーデック:H.264)
    • 露光時間・ゲインを設定し、静止画保存をする(pythonnet編)
  • リンク集

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

露光時間・ゲインを設定し、静止画保存をする(pythonnet編)

概要

IC Imaging Control 3.5のWindows専用APIを使用したPythonのプログラムで、ここでは露光時間・ゲインを設定し静止画として保存しています。

サンプルプログラム

サンプル(Python) pythonnet_snap_save_image_python.zip

サンプルの出力

なし(実行プログラム内にimage.jpgが保存されます)

コード全体

import ctypes as C
import numpy as np

# PyhtonNetをインポートする
import clr
# 同じフォルダ内にあるIC Imaging Control3.5のDllを参照する
clr.AddReference('TIS.Imaging.ICImagingControl35')
clr.AddReference('System')

# IC Imaging Control namespaceを宣言
import TIS.Imaging
from System import TimeSpan



#IC Imaging Controlのオブジェクトを作成
ic = TIS.Imaging.ICImagingControl()

# snap sinkを宣言(静止画を保存するための画像バッファ)
snapsink = TIS.Imaging.FrameSnapSink(TIS.Imaging.MediaSubtypes.RGB32)
ic.Sink = snapsink

ic.LiveDisplay = False

# 最後に使用したビデオキャプチャデバイスを開く
try:
    ic.LoadDeviceStateFromFile("device.xml",True)
    if ic.DeviceValid is True:
        ic.LiveStart()

except Exception as ex:
    ic.ShowDeviceSettingsDialog()
    if ic.DeviceValid is True:
        ic.SaveDeviceStateToFile("device.xml")
        ic.LiveStart()
    pass

# 各プロパティ値を取得
ExposureAuto = ic.VCDPropertyItems.FindInterface(TIS.Imaging.VCDIDs.VCDID_Exposure,
                TIS.Imaging.VCDIDs.VCDElement_Auto,TIS.Imaging.VCDIDs.VCDInterface_Switch)

#露出用の絶対値インターフェース。露出時間を秒単位で設定できます。
ExposureValue = ic.VCDPropertyItems.FindInterface(TIS.Imaging.VCDIDs.VCDID_Exposure,
                TIS.Imaging.VCDIDs.VCDElement_Value,TIS.Imaging.VCDIDs.VCDInterface_AbsoluteValue)                

#自動ゲインプロパティを取得する
GainAuto = ic.VCDPropertyItems.FindInterface(TIS.Imaging.VCDIDs.VCDID_Gain,
                TIS.Imaging.VCDIDs.VCDElement_Auto,TIS.Imaging.VCDIDs.VCDInterface_Switch)

#ゲイン値を取得
GainValue = ic.VCDPropertyItems.FindInterface(TIS.Imaging.VCDIDs.VCDID_Gain,
                TIS.Imaging.VCDIDs.VCDElement_Value,TIS.Imaging.VCDIDs.VCDInterface_Range)

#自動ゲインをOFFにする                     
if GainAuto is not None:
    GainAuto.Switch = False

# ゲインの値をセットする
if GainValue is not None:
    GainValue.Value = GainValue.RangeMin

# 露出自動を無効にする
if ExposureAuto is not None:
    ExposureAuto.Switch = False

# 1/30秒の露出時間を設定します
if ExposureValue is not None:
    ExposureValue.Value = 0.0333

#1回目の撮影で上記で設定したプロパティを有効化
snapsink.SnapSingle(TimeSpan.FromSeconds(5))

#2回目の撮影で上記で設定したプロパティを有効化
frame = snapsink.SnapSingle(TimeSpan.FromSeconds(5))

# 75%の品質で画像を保存する
TIS.Imaging.FrameExtensions.SaveAsJpeg( frame,"image.jpg", 75)

# RGB64で保存
TIS.Imaging.FrameExtensions.SaveAsTiff( frame,"image.tiff")

print("Image saved.")
#ライブストリーミングを停止する
ic.LiveStop()
ic.Dispose()

解説

pythonnetでのVCDプロパティの設定方法

IC Imaging Contorol 3.4をインストールした時にVCD Property Inspectorがインストールされていますので、そのアプリを立ち上げてカメラを選択すると設定できるプロパティ値が出てきます。
下記の通り、VCD Property Inspectorが起動します。 VCD プロパティはツリー構造で構成されており、名前と要素(値やスイッチなど)をセットで持ったオブジェクト(VCDPropertyItem)です。そのオブジェクトの要素(VCDPropertyElement)には 、要素を調整する為のインターフェースのセットを持っており、簡単にプロパティ値にアクセスできるようになっています。

プロパティを操作する為には適切な項目、要素、インターフェースを呼び出す必要があります。そのためにItem ID、Element ID、Interface ID確認します。

例:Gain VCDElement_Value AbsoluteValueの場合(上図の赤枠を参照)

Item ID VCDID_Gain
Element ID VCDElement_Value
Interface ID VCDInterface_AbsoluteValue

VCDPropertyItems.FindItem メソッドを使って適切なプロパティに割り当てます。呼び出されるプロパティ項目はIDで指定する必要があります。今回の場合は"Gain"のVCDID_Gain等になります。さらに、プロパティは複数のエレメントから構成されています。エレメントには値や自動設定、ワンプッシュ動作などのパラメータがあります。プロパティの調整をするのにはインターフェースが使われ、プロパティ項目のエレメントより取得することが可能です。
取得したインターフェースを用いてカメラのプロパティ値を制御することができます。

# 各プロパティ値を取得
ExposureAuto = ic.VCDPropertyItems.FindInterface(TIS.Imaging.VCDIDs.VCDID_Exposure,
                TIS.Imaging.VCDIDs.VCDElement_Auto,TIS.Imaging.VCDIDs.VCDInterface_Switch)

#露出用の絶対値インターフェース。露出時間を秒単位で設定できます。
ExposureValue = ic.VCDPropertyItems.FindInterface(TIS.Imaging.VCDIDs.VCDID_Exposure,
                TIS.Imaging.VCDIDs.VCDElement_Value,TIS.Imaging.VCDIDs.VCDInterface_AbsoluteValue)                

#自動ゲインプロパティを取得する
GainAuto = ic.VCDPropertyItems.FindInterface(TIS.Imaging.VCDIDs.VCDID_Gain,
                TIS.Imaging.VCDIDs.VCDElement_Auto,TIS.Imaging.VCDIDs.VCDInterface_Switch)

#ゲイン値を取得
GainValue = ic.VCDPropertyItems.FindInterface(TIS.Imaging.VCDIDs.VCDID_Gain,
                TIS.Imaging.VCDIDs.VCDElement_Value,TIS.Imaging.VCDIDs.VCDInterface_Range)

#自動ゲインをOFFにする                     
if GainAuto is not None:
    GainAuto.Switch = False

# ゲインの値をセットする
if GainValue is not None:
    GainValue.Value = GainValue.RangeMin

# 露出自動を無効にする
if ExposureAuto is not None:
    ExposureAuto.Switch = False

# 1/30秒の露出時間を設定します
if ExposureValue is not None:
    ExposureValue.Value = 0.0333

下記のリファレンスマニュアルにてVCDプロパティの基本機能について記載しております。

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

画像を取得

# snap sinkを宣言(静止画を保存するための画像バッファ)
snapsink = TIS.Imaging.FrameSnapSink(TIS.Imaging.MediaSubtypes.RGB32)
ic.Sink = snapsink

#  省略

#1回目の撮影で上記で設定したプロパティを有効化
snapsink.SnapSingle(TimeSpan.FromSeconds(5))

#2回目の撮影で上記で設定したプロパティを有効化
frame = snapsink.SnapSingle(TimeSpan.FromSeconds(5))

# 75%の品質で画像を保存する
TIS.Imaging.FrameExtensions.SaveAsJpeg( frame,"image.jpg", 75)

# RGB64で保存
TIS.Imaging.FrameExtensions.SaveAsTiff( frame,"image.tiff")

FrameSnapSinkの場合、上記の通りsnapsinkのメソッドを呼び出すだけで画像を保存することができます。

sinkのMediaSubtypesをRGB64に設定することで、RGB64形式の画像をTIFF形式で保存することも可能です。
その場合、以下のようにsnapsinkを設定してください。

snapsink = TIS.Imaging.FrameSnapSink(TIS.Imaging.MediaSubtypes.RGB64)
▲ このページの先頭に戻る

Copyright © ARGO Corporation. All Rights Reserved.