自動マーク認識&画像生成
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_fpm_pattern_make_image( FHANDLE hsrc, f_fpm_markshape shape, bool hole, int threshold, ref FHANDLE hdst, ref F_FPM_MARKINFO fpm_markinfo, ref int score ) |
Visual Basic |
---|
Public Shared Function fnFIE_fpm_pattern_make_image ( hsrc As FHANDLE, shape As f_fpm_markshape, hole As Boolean, threshold As Integer, ByRef hdst As FHANDLE, ByRef fpm_markinfo As F_FPM_MARKINFO, ByRef score As Integer ) As Integer |
Parameters
- hsrc
- Type: fvalgcli..::..FHANDLE
対象画像オブジェクト(type:uc8のみ) チャネル数は 1 でなければいけません。
- shape
- Type: fvalgcli..::..f_fpm_markshape
マーク形状の指定- F_FPM_SHAPE_AUTO を実行した場合には形状、中抜きの有無の検出を自動で行いますが、全ての形状に対しての検出処理を行うため処理時間は掛かってしまいます。
- F_FPM_SHAPE_AUTO 自動判別
- F_FPM_SHAPE_CIRC 円
- F_FPM_SHAPE_RECT 長方形
- F_FPM_SHAPE_CROSS 十字
- hole
- Type: System..::..Boolean
中抜きの有無。shape にF_FPM_SHAPE_AUTOを指定した場合にはこの値は使用せず、中抜きの有無を自動で検出します。- TRUE 中抜きあり
- FALSE 中抜きなし
- threshold
- Type: System..::..Int32
スコア閾値(範囲:10≦threshold≦99) この値を超えたスコアを持つパタンの結果を格納します(推奨値:50)。
- hdst
- Type: fvalgcli..::..FHANDLE%
パタン画像を格納する画像オブジェクトへのポインタ hsrcと同じサイズの画像オブジェクト(type:uc8)が生成され、認識した背景、パタンそれぞれの平均濃度値を求めて描画します。 hdst に IntPtr.Zero を指定した場合には結果の格納を行いません。 *hdst の値は0で初期化しておいてください。
- fpm_markinfo
- Type: fvalgcli..::..F_FPM_MARKINFO%
検出したFPMマーク情報を格納する構造体のポインタ fpm_markinfoに IntPtr.Zero を指定した場合には結果の格納を行いません。
- score
- Type: System..::..Int32%
正常終了した場合のマークのスコア(100点満点) IntPtr.Zero を指定した場合には結果の格納を行いません。
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_CALC_IMPOSSIBLE | 計算不可能(対応するマークが見つかりませんでした) |
F_ERR_NOMEMORY | メモリ不足 |
F_ERR_INVALID_PARAM | 不正なパラメータが入力されました |
F_ERR_FPM_NOFEATURE | 特徴量計測不可識別したマークの平均濃度が一致したため、塗りつぶしによる判断が不可能です。) ただしこの場合でも IntPtr.Zero 以外を指定した場合には fpm_markinfo にマーク情報が格納されます。 |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
Remarks
Examples
C# | Copy |
---|---|
// $Revision: 1.1 $ using System; using System.Collections.Generic; using System.Text; using fvalgcli; namespace TC { public partial class FIE { [FvPluginExecute] public void fnFIE_fpm_pattern_make_image() { int status = (int)f_err.F_ERR_NONE; FHANDLE hsrc = FHANDLE.Zero; // 処理画像. FHANDLE hroi = FHANDLE.Zero; // 処理範囲. FHANDLE hdst = FHANDLE.Zero; // 出力画像. try { // 入力画像ファイルのロード. api.fnFIE_load_img_file(TestImageDir + "/testdata/fpm_pattern_cross.bmp", ref hsrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8); // 処理範囲. hroi = api.fnFIE_img_child_alloc(hsrc, 104, 90, 97, 83); // パラメータ. f_fpm_markshape shape = f_fpm_markshape.F_FPM_SHAPE_CROSS; bool hole = false; int threshold = 60; F_FPM_MARKINFO fpm_markinfo = new F_FPM_MARKINFO(); int score = 0; // 処理の実行. status = api.fnFIE_fpm_pattern_make_image(hroi, shape, hole, threshold, ref hdst, ref fpm_markinfo, ref score); // エラー判定. Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 出力画像の保存. api.fnFIE_save_png(ResultDir + "/fnFIE_fpm_pattern_make_image.png", hdst, -1); // 確認. Console.WriteLine("fnFIE_fpm_pattern_make_image"); Console.WriteLine("score ={0}", score); Console.WriteLine("shape ={0}", fpm_markinfo.shape); Console.WriteLine("mark_n={0}", fpm_markinfo.mark_n); Console.WriteLine("vrtx_n={0}", fpm_markinfo.vrtx_n); for (int i = 0; i < fpm_markinfo.mark_n; i++) { Console.WriteLine("center[{0}]={1},{2}", i, fpm_markinfo.center[i].x, fpm_markinfo.center[i].y); Console.WriteLine("radius[{0}]={1}", i, fpm_markinfo.radius[i]); Console.WriteLine("deg [{0}]={1}", i, fpm_markinfo.deg[i]); for (int j = 0; j < fpm_markinfo.vrtx_n; j++) { DPNT_T vrtx = fpm_markinfo.vrtx[i * defs.F_FPM_MAX_SHAPE_N + j]; Console.WriteLine("vrtx[{0},{1}]={2},{3}", i, j, vrtx.x, vrtx.y); } } } finally { // オブジェクトの開放. hsrc.Dispose(); hroi.Dispose(); hdst.Dispose(); } } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ Imports System.Collections.Generic Imports System.Text Imports fvalgcli Public Partial Class FIE <FvPluginExecute> _ Public Sub fnFIE_fpm_pattern_make_image() Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim hsrc As FHANDLE = FHANDLE.Zero ' 処理画像. Dim hroi As FHANDLE = FHANDLE.Zero ' 処理範囲. Dim hdst As FHANDLE = FHANDLE.Zero ' 出力画像. Try ' 入力画像ファイルのロード. api.fnFIE_load_img_file(TestImageDir & "/testdata/fpm_pattern_cross.bmp", hsrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8) ' 処理範囲. hroi = api.fnFIE_img_child_alloc(hsrc, 104, 90, 97, 83) ' パラメータ. Dim shape As f_fpm_markshape = f_fpm_markshape.F_FPM_SHAPE_CROSS Dim hole As Boolean = False Dim threshold As Integer = 60 Dim fpm_markinfo As New F_FPM_MARKINFO() Dim score As Integer = 0 ' 処理の実行. status = api.fnFIE_fpm_pattern_make_image(hroi, shape, hole, threshold, hdst, fpm_markinfo, _ score) ' エラー判定. Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 出力画像の保存. api.fnFIE_save_png(ResultDir & "/fnFIE_fpm_pattern_make_image.png", hdst, -1) ' 確認. Console.WriteLine("fnFIE_fpm_pattern_make_image") Console.WriteLine("score ={0}", score) Console.WriteLine("shape ={0}", fpm_markinfo.shape) Console.WriteLine("mark_n={0}", fpm_markinfo.mark_n) Console.WriteLine("vrtx_n={0}", fpm_markinfo.vrtx_n) For i As Integer = 0 To fpm_markinfo.mark_n - 1 Console.WriteLine("center[{0}]={1},{2}", i, fpm_markinfo.center(i).x, fpm_markinfo.center(i).y) Console.WriteLine("radius[{0}]={1}", i, fpm_markinfo.radius(i)) Console.WriteLine("deg [{0}]={1}", i, fpm_markinfo.deg(i)) For j As Integer = 0 To fpm_markinfo.vrtx_n - 1 Dim vrtx As DPNT_T = fpm_markinfo.vrtx(i * defs.F_FPM_MAX_SHAPE_N + j) Console.WriteLine("vrtx[{0},{1}]={2},{3}", i, j, vrtx.x, vrtx.y) Next Next Finally ' オブジェクトの開放. hsrc.Dispose() hroi.Dispose() hdst.Dispose() End Try End Sub End Class |