標準のプラグインとしてタイプの異なる3つのプラグインがあります.
画像を閾値で2値化するプラグインです.
プラグインを起動すると,プラグインウィンドウが開きます.
閾値を変更することで,閾値に応じた2値化結果がプレビュー画面に表
示されます.
適用ボタンを押すことで結果がメインウィンドウに反映されます.
画像にラプラシアンフィルターをかけるプラグインです.
これはダイアログが表示されないタイプのプラグインで,結果はそのま
まメインウィンドウに繁栄されます.
画像にガウシアンフィルターをかけるプラグインです.
2値化プラグインと異なる所は,プレビューボタンを押さなければプレ
ビュー画面が更新されない所です.
プログラムの実行に時間がかかる場合は,このタイプのプラグインにし
た方がいいでしょう.
計算の途中経過をウィンドウの下にあるバーで確認することができます.
オリジナルプラグインの作成方法について説明します.
ここでは,ラプラシアンフィルタプラグインを参考にダイアログを使用 し ないプラグインの作り方を説明します.
ソースの色づけは以下のようになっています.
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <teo.h> #include <teoeyesplugin.h> |
必要なヘッダーファイルです.
必要に応じて追加して下さい.
/* *************************************************************************
*
プラグイン情報 * ************************************************************************* */ PluginInfo info = { "ラプラシアンフィルタ", /* メニュータイトル */ "菅谷 保之", /* 作成者 */ "1.0", /* バージョン */ "ラプラシアンフィルタ\n" /* プラグインの説明 */ "をかけるプラグインです", PLUGIN_SRC_CURRENT /* 入力画像のタイプ */ }; |
プラグインからTeoEyesに知らせるプラグイン情報です.
TeoEyesの設定ウィンドウのプラグインのページで参照できます.
/* *************************************************************************
*
プラグイン関数本体 * ************************************************************************* */ TEOIMAGE* plugin_laplacian (TEOIMAGE *src) { TEOIMAGE *dst; int n, m, p, col, row; int scope = 1; int val[3], filter[] = {-1, -1, -1, -1, 8, -1, -1, -1, -1}; /* 出力画像用メモリの確保 */
/* ラプラシアンフィルタをかける */
return dst;
|
プラグインの本体となる関数です.
ここに実際に行いたい画像処理アルゴリズムを書きます.
画像処理を施した結果の画像データ(TEOIMAGE)を関数の返り値
とします.
/* *************************************************************************
*
プラグイン実行用関数 * ************************************************************************* */ void plugin_run (void) { TEOIMAGE *src; TEOIMAGE *dst; TEO_UINT8 val; int col, row; /* 入力画像データの獲得 */
/* 出力画像の生成 */
/* 出力画像データの転送 */
/* 出力画像用メモリを開放する */
|
この関数では,
/* *************************************************************************
*
プラグインメイン関数 * ************************************************************************* */ int main (int argc, char **argv) { /* 引数に応じてプラグインを実行する */ switch (atoi (argv[1])) { case PLUGIN_RUN: /* プラグインの実行 */ plugin_run (); break; case PLUGIN_QUERY: /* プラグイン情報の出力 */ plugin_query (&info); break; } return 0; } |
最後は,プラグインのメイン関数です.
この部分は変更する必要はありません.
あとはコンパイルすれば完成です.プラグインの拡張子は.tpiに統一し て下さい.コンパイル用のMakefileも載 せておきます.
ダイアログを使用するプラグインについて説明します.
ダイアログの生成等のインターフェースはプラグインライブラリで
用意されていますので,何も難しいことはありません.
#include <stdio.h>
#include <stdlib.h> #include <math.h> #include <teo.h> #include <teoeyesplugin.h> #define MIN_VAL
0
|
先程のプラグインと違う所は,ヘッダーファイルの他に#defineの行
が追加されているところです.
ここでは,パラメータの最小値,最大値,増加量,ページの大きさを
定義します.
/* *************************************************************************
*
プラグイン情報 * ************************************************************************* */ PluginInfo info = { "2値化プラグイン", /* メニュータイトル */ "菅谷 保之", /* 作成者 */ "1.0", /* バージョン */ "画像を閾値で2値化", /* プラグインの説明 */ PLUGIN_SRC_CURRENT /* 入力画像のタイプ */ }; |
この箇所は,前のプラグインと同様です.
/* *************************************************************************
*
プラグイン関数本体 * ************************************************************************* */ TEOIMAGE* plugin_binary (TEOIMAGE *src, float param) { int row, col, p; TEO_UINT8 val; TEOIMAGE *dst; /* 出力画像用メモリの確保 */
for (row = TeoYstart (src); row <= TeoYend
(src); row++) {
return dst;
|
プラグイン関数本体です.
ここも特にダイアログを使用しない時と比べて変わりませんが,計算
の進行状況を表すプログレスバーを表示したい場合,緑の文字の部分
のコメントアウトを外して下さい(#if 0 -> #if 1).
最後にプラグイン用のMakefileを載せておきます.
/* *************************************************************************
*
プラグイン実行用関数 * ************************************************************************* */ void plugin_run (void) { TEOIMAGE *src; /* 入力画像データの獲得 */
/* プラグインウィンドウの表示 */
|
ここでは,入力画像データの読み込みと,ダイアログの表示を行い
ます.
ダイアログが表示された後の処理はライブラリが処理してくれます.
ダイアログを使用しないプラグインの場合,ここで出力画像データ
の転送を行いましたが,これもライブラリが処理してれます.
メイン関数です.
先程と同様,ここは何も変更する必要はありません.
CC
= gcc -O3
PREFIX
= /usr/local/lab
CFLAGS
= -I$(TEODIR)/include \
LDFLAGS
= -L$(TEODIR)/lib \
LIBS
= -Wall \
DEST = $(PREFIX)/share/teoeyes/plugins OBJS = binary.o PROGRAM = binary.tpi all: $(PROGRAM) $(PROGRAM): $(OBJS) $(HDRS)
clean:; rm -f *.o *~ core $(PROGRAM) install:
$(PROGRAM)
|