ROI(関心領域)の設定方法
概要
ROI(関心領域)を切り出し、ライブ表示しながら、ROIを移動させる方法について説明します。
サンプルプログラム
サンプル(Python) | roi_setting_python.zip |
---|
サンプルツールの出力
コード全体
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)):
# 解像度を指定
ic.IC_SetVideoFormat(hGrabber, tis.T("Y800 (1024x768)"))
# フレームレートを指定
ic.IC_SetFrameRate(hGrabber, ctypes.c_float(30.0))
#ライブスタート開始 引数:0の時非表示、引数:1の時表示
ic.IC_StartLive(hGrabber, 1)
ic.IC_MsgBox(tis.T("ROIを実行しますのでOKボタンをクリックしてください。"),
tis.T("ROI Demo"))
ic.IC_StopLive(hGrabber)
# 640x480のサイズでROIを設定します。 使用するカメラの幅と高さが有効であることを確認してください。
ic.IC_SetVideoFormat(hGrabber, tis.T("Y800 (640x480)")) #640x200など任意のサイズに設定可能です。
ic.IC_SetFrameRate(hGrabber, ctypes.c_float(30.0))
# センサーのROIを移動するには、パーシャルスキャンオートセンターを無効にする必要があります
ic.IC_SetPropertySwitch(hGrabber, tis.T("Partial scan"),
tis.T("Auto-center"), 0)
ic.IC_StartLive(hGrabber, 1)
# センサーのROIをx座標とy座標で移動します。
# ライブ表示中に実行されます。
x = 0
for y in range(0, 768-480):
ic.IC_SetPropertyValue(hGrabber, tis.T("Partial scan"),
tis.T("Y Offset"), y)
ic.IC_SetPropertyValue(hGrabber, tis.T("Partial scan"),
tis.T("X Offset"), x)
x = x + 1
time.sleep(0.05)
ic.IC_MsgBox(tis.T("元の画面に戻りますのでOKボタンをクリックしてください。"), tis.T("ROI Demo"))
ic.IC_StopLive(hGrabber)
# オリジナルの解像度・フレームレートに戻す
ic.IC_SetVideoFormat(hGrabber, tis.T("Y800 (1024x768)"))
ic.IC_SetFrameRate(hGrabber, ctypes.c_float(30.0))
# パーシャルスキャンオートセンターを有効にして、ROIが再びセンサーの中央にくるようにします。
ic.IC_SetPropertySwitch(hGrabber, tis.T("Partial scan"),
tis.T("Auto-center"), 1)
ic.IC_StartLive(hGrabber, 1)
ic.IC_MsgBox(tis.T("OKボタンで終了します。"), tis.T("ROI Demo"))
ic.IC_StopLive(hGrabber)
else:
ic.IC_MsgBox(tis.T("No device opened"), tis.T("ROI Demo"))
ic.IC_ReleaseGrabber(hGrabber)
解説
ic.IC_SetVideoFormat(hGrabber, tis.T("Y800 (1024x768)"))
まずはY800(モノクロの8bit)形式で1024x768の解像度で画像を取得します。
ここでは例として1024x768としていますがお使いのカメラのスペックの解像度を選択ください。
ic.IC_SetVideoFormat(hGrabber, tis.T("Y800 (640x480)"))
上記の例ではY800(モノクロの8bit)形式で1024x768の解像度で画像を切り出していますが、640x200など任意のの大きさに切出すことができます。
ic.IC_SetPropertySwitch(hGrabber, tis.T("Partial scan"),tis.T("Auto-center"), 0)
センサーのどこの位置で切り出しをするのか指定することができます。
デフォルトではセンサーの中央を切り出すモードになっているのでIC_SetPropertySwitchメソッドでOFFにします。
# ライブスタート開始
ic.IC_StartLive(hGrabber, 1)
# センサーのROIをx座標とy座標で移動します。
# ライブ表示中に実行されます。
x = 0
for y in range(0, 768-480):
ic.IC_SetPropertyValue(hGrabber, tis.T("Partial scan"),
tis.T("Y Offset"), y)
ic.IC_SetPropertyValue(hGrabber, tis.T("Partial scan"),
tis.T("X Offset"), x)
x = x + 1
time.sleep(0.05)
Partial scanのプロパティによって切り出された位置をxy座標で指定しています。
ライブ表示しながらPartial scanを変更できるのでサンプルの出力にあるように画面で確認しながら画素切り出しの位置を指定することができます。