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

オートフォーカスで焦点を調整する範囲を指定

概要

オートフォーカスのワンプッシュ機能の実装方法について説明します。

サンプルプログラム

サンプル(Python) autofocus_onepush_region_python.zip

ご利用いただけるカメラは下記の機種のみです。
DFK(DMK)22/72-F、DFK(DMK)AFUxxx-M12
DFK(DMK)39GX265-Z20、DFKZ30GP031、DFKZ12GP031

サンプルツールの出力

コード全体

import ctypes 
import tisgrabber as tis
import time

#tisgrabber_x64.dllをインポートする
ic = ctypes.cdll.LoadLibrary("./tisgrabber_x64.dll")
tis.declareFunctions(ic)

#ICImagingControlクラスライブラリを初期化します。
#この関数は、このライブラリの他の関数が呼び出される前に1回だけ呼び出す必要があります。
ic.IC_InitLibrary(0)

#ダイアログ画面を表示
hGrabber = tis.openDevice(ic)

if ic.IC_IsDevValid(hGrabber): 
    # 1920x1080の解像度で表示
    # 1920x1080以下の解像度にする場合は変更してください。
    if ic.IC_SetVideoFormat(hGrabber, tis.T("RGB32 (1920x1080)")) == tis.IC_ERROR:
        print("1920x1080の解像度でカラーで表示できません。")
        ic.IC_ReleaseGrabber(hGrabber)
        quit()
    #解像度を指定
    ic.IC_SetFrameRate(hGrabber, ctypes.c_float(30.0))
    #ライブスタート開始 引数:0の時非表示、引数:1の時表示
    ic.IC_StartLive(hGrabber, 1)

    # オートフォーカスの有効化
    if ic.IC_SetPropertySwitch(hGrabber, tis.T("Focus"), tis.T("Enable Region of Interest"), 1) == tis.IC_SUCCESS:
        #フォーカス調整する関心領域
        ic.IC_SetPropertyValue(hGrabber, tis.T("Focus"), tis.T("Left"), 100)
        ic.IC_SetPropertyValue(hGrabber, tis.T("Focus"), tis.T("Top"), 100) 
        ic.IC_SetPropertyValue(hGrabber, tis.T("Focus"), tis.T("Right"), 400)
        ic.IC_SetPropertyValue(hGrabber, tis.T("Focus"), tis.T("Bottom"), 400)
    else:
        print("フォーカス制御をサポートしていない機種です。")

    # オートフォーカスのワンプッシュ
    if ic.IC_PropertyOnePush(hGrabber, tis.T("Focus"), tis.T("One Push")) == tis.IC_SUCCESS:
        print("自動フォーカス、スタート")

        onepushrunning = ctypes.c_long()   

        # オートフォーカスが終わるまで待つ
        if ic.IC_GetPropertySwitch(hGrabber, tis.T("Focus"), tis.T("One Push Running"), onepushrunning) == tis.IC_SUCCESS:
            while onepushrunning.value == 1:
                time.sleep(1)
                ic.IC_GetPropertySwitch(hGrabber, tis.T("Focus"), tis.T("One Push Running"), onepushrunning)
        else:
            print("このカメラではワンプッシュの機能はサポートしていません。")

        print("自動フォーカス、終了")
    else:
        print("このカメラではオートフォーカスのワンプッシュをサポートしていません。")

    ic.IC_MsgBox(tis.T("OKボタンで終了します。"), tis.T("Simple Live Video"))
    ic.IC_StopLive(hGrabber)
else:
    ic.IC_MsgBox(tis.T("No device opened"), tis.T("Simple Live Video"))

ic.IC_ReleaseGrabber(hGrabber)

解説

そもそもフォーカス値の算出は、ユーザが指定した所定の映像領域の輝度値に対して微分処理を行い、微分処理した値の総和を使用し、最も総和が高いものをフォーカスがあっているものとしてロジックを組む必要がありますが、TheImagingSource社ではそのロジックをAPIで用意しています。オートフォーカスにするには下記のロジックをしてください。

オートフォーカスをする領域を選択する

# オートフォーカス関心領域の有効化
if ic.IC_SetPropertySwitch(hGrabber, tis.T("Focus"), tis.T("Enable Region of Interest"), 1) == tis.IC_SUCCESS:
    #フォーカス調整する関心領域
    ic.IC_SetPropertyValue(hGrabber, tis.T("Focus"), tis.T("Left"), 100)
    ic.IC_SetPropertyValue(hGrabber, tis.T("Focus"), tis.T("Top"), 100) 
    ic.IC_SetPropertyValue(hGrabber, tis.T("Focus"), tis.T("Right"), 400)
    ic.IC_SetPropertyValue(hGrabber, tis.T("Focus"), tis.T("Bottom"), 400)    
    

上記ではオートフォーカスの関心領域をxy座標(100,100)を起点として縦横300pixel分を切り出しています。
上記のオートフォーカス関心領域の有効化を指定しなくてもオートフォーカスを調整することが可能です。
この切り出した範囲内の輝度値に対して微分処理を行います。

ワンプッシュ処理

if ic.IC_PropertyOnePush(hGrabber, tis.T("Focus"), tis.T("One Push")) == tis.IC_SUCCESS:
    print("自動フォーカス、スタート")

    onepushrunning = ctypes.c_long()   

    # オートフォーカスが終わるまで待つ
    if ic.IC_GetPropertySwitch(hGrabber, tis.T("Focus"), tis.T("One Push Running"), onepushrunning) == tis.IC_SUCCESS:
        while onepushrunning.value == 1:
            time.sleep(1)
            ic.IC_GetPropertySwitch(hGrabber, tis.T("Focus"), tis.T("One Push Running"), onepushrunning)
            

ワンプッシュのメソッドをコールすることで、先に切出した範囲で輝度値に対して微分処理を行い、微分処理した値の総和が高いものがでるまで、動作し続けます。

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

Copyright © ARGO Corporation. All Rights Reserved.