新シリーズ『TIPs for HALCONIST !!』では、HALCONを使いこなせるHALCONISTになるためのちょっとしたTIPsを紹介していきます。
知っているようで知らないTIPsもあるはずですので今後のシリーズ展開にご期待ください。
今回はHALCONを用いて画像処理を行う際に知っておくと便利な、HALCONの描画機能に関するTIPsを紹介します。
■
TIPs1: グラフィックスウインドウの描画テクニック
画像処理の途中で生成する中間オブジェクトや処理結果の表示など、グラフィックスウインドウを活用することで画像処理アルゴリズムの開発効率を格段に向上させることが可能です。
グラフィックスウインドウは、画像や領域などのオブジェクトを新たに表示する際に、それまでに表示していたオブジェクト上に上書きして描画する特性があります。このオブジェクトの描画は、各オペレーターを実行して新たにオブジェクトが生成されたタイミングで行われます。このため、複数のオペレーターを連続的に実行した場合、それぞれの結果取得されるオブジェクトが重なって表示され、適切な結果を確認できなかったというユーザー様もいらっしゃると思います。このような場合、dev_displayオペレーターが有効です。例えば、まずdev_displayオペレーターで検査画像を表示させ、再度dev_displayオペレーターをコールして結果の領域オブジェクトを表示させる方法をとることで、確認したい結果だけを適切に調査することができます。
プログラムを実行していると、画像処理に要する時間を計測したいという要求が当然でてきます。HALCONの開発環境であるHDevelopは、プログラム実行時に上述のグラフィックスウインドウやプログラムリストウインドウ内のプログラムカウンタなど、様々な情報を更新する機能を持っています。従って、画像処理のみに要する時間を計測する際には、これらの機能を無効にする必要があります。グラフィックスウインドウの描画更新機能を無効にするには、次のオペレーターを実行します。
これにより、プログラム実行中のグラフィックスウインドウ画面出力の更新/非更新を設定することが可能です。引数を’off’に設定することで、非更新となります。
一旦グラフィックウインドウの更新機能を無効に設定すると、dev_displayオペレーターを実行するまでウインドウ内には何も表示されません。また、更新機能を有効にしたい場合、引数を’on’と設定します。
これまで紹介してきたように、グラフィックの更新機能を無効にしてdev_displayオペレーターを用いることで、興味のあるオブジェクトだけを表示させて確認することが可能です。この場合にも、グラフィックスウインドウへのグラフィックの出力はdev_displayオペレーターをコールしたタイミングで行われます。
ここで以下のように、検査画像と画像処理後によって抽出した領域オブジェクト1つを表示するといった処理であれば、前述の通りdev_displayオペレーターを2回コールすれば処理を実現できます。
dev_display(Image)
dev_display(Region)
|
※Image:画像オブジェクト名、Region:領域オブジェクト名
2回程度のグラフィック出力であればそれほど実行時間による差は感じられませんが、連続して複数回のグラフィック出力を実行する場合、dev_displayオペレーターの実行時間の差により画面のちらつきを感じることがあります。このような現象を回避する方法として、dev_displayオペレーターのコール時にグラフィック出力を行うのではなく、一旦バッファに出力したいオブジェクトを蓄積しておき、最終的に全てのオブジェクトを同時に出力する方法があります。
set_system(‘flush_graphic’, false)
dev_display(Image)
dev_display(Regions)
set_system(‘flush_graphic’,true)
write_string(WindowHandle, ‘ ‘)
|
上記のオペレーター群では、まずset_systemオペレーターでパラメーター’flush_graphic’をfalseに設定します。本設定以降でdev_displayオペレーターにより出力されるオブジェクトは、全てバッファに蓄えられます。出力すべきオブジェクト全ての記述が終わったならば、set_systemオペレーターのパラメーター’flush_graphic’をtrueに設定した後、write_stringオペレーターにて出力先のグラフィックスウインドウのハンドルと、出力する文字列を入力します。(※
この時、特にwrite_stringを用いて出力する内容がない場合は、上記オペレーター群の例のようにスペース(’ ‘)を入力します。)
set_systemオペレーターで’flush_graphic’をtrueに設定するまでの間にバッファに蓄えられたオブジェクトは、write_stringオペレーター実行時に全て同時に出力されます。
以上の操作を行うことで、検査結果などの欲しい情報を、より綺麗に確認できます。
■
TIPs2: グラフィクスウインドウで日本語フォントを使用
HALCON 8.0以降のバージョンでは、開発環境HDevelopが日本語に対応しています。HDevelopだけでなく、グラフィックスウインドウの表示についても日本語での表示が可能となっていますので、その設定方法についてご紹介します。
HALCONで使用できるフォントは、query_fontオペレーターを実行することで調査することができます。
query_font (WindowHandle, Font)
|
上記のようにグラフィックスウインドウのハンドルと、オペレーター実行時に使用可能なフォント一覧が格納されるチュープル名(本例では「Font」)を入力します。実行すると、以下のようにフォント一覧が確認できます。
チュープル「Font」に格納されたフォントの種類から、使用したいフォントを選択します。上図のように、チュープル「Font」の140行目に格納されたフォント(MS
ゴシック)を使用したい場合、set_fontフォントオペレーターにて以下のように設定します。
set_font (WindowHandle, '-MS ゴシック-32-16-0-0-0-0-SHIFTJIS_CHARSET-')
|
※ フォント名(’MS
ゴシック’など)の後に続く数値はフォントサイズ、斜体、ボールドなどの設定に用いられます。詳細はset_fontオペレーターのリファレンスマニュアルをご参照ください。
以上の設定を行った後、write_stringオペレーターなどを用いて日本語の文字列をグラフィックスウインドウに出力することが可能です。
|