CFvFPM2Matching を使用したマッチング処理の例を示します。
この例では特徴点の抽出にソーベルエッジを使用しています。
マッチングテンプレート(CFvPattern)は、 処理対象画像から MakePattern を行って保存していたものを使用しています。 マッチングテンプレートの生成やファイル保存については、 FVCL::Data::CFvPattern のサンプルコードを参考にしてください。
処理結果の画像下に記述している処理時間は、Intel Core2 2.13GHz 2.0GB RAM で実行した時のものです。 画像サイズは 320x240 です。処理対象画像の状態やパラメータの設定内容によって速度は変化します。
【関数の出力】
User::SampleCode::FPM2::Search_Sobel
pattern edges=244
image edges=1585
execute. 75.078488 msec, count=10
【関数の出力】
User::SampleCode::FPM2::Search_Sobel
pattern edges=396
image edges=1888
execute. 42.086758 msec, count=3
ソースコード:
上記 1) の処理は、下記の関数に引数 0,0 を指定して実行したものです。 2) の処理は、引数 1,0 を指定して実行したものです。
void Search_Sobel(int target = 0, int option = 0)
{
_tprintf(_T("%s\n"), __TFUNCTION__);
{
_T(".\\clip_UC8_M.png"),
_T(".\\key_UC8_M.png"),
};
{
_tprintf(_T("%s: Failed to load image file. code=%d\n"), __TFUNCTION__, status);
return;
}
{
_T(".\\clip.pat"),
_T(".\\key1.pat"),
};
if( ! pattern.
Load( szPatFile[target] ) )
{
_tprintf(_T(
"Failed to load pattern file. code=%d\n"), pattern.
GetErrorCode());
return;
}
switch (option)
{
case 0:
break;
case 1:
break;
}
{
_tprintf(_T(
"pattern edges=%d \n"), edges_pattern.
size());
}
{
_tprintf(_T(
"image edges=%d \n"), edges_image.
size());
}
double msec = timer.Stop();
_tprintf(_T(
"execute. %f msec, count=%d \n"), msec, matching.
GetResultSize());
filename.
Format(_T(
"FPM2.Search_SobelEdge-%d_%d.png"), target, option);
SaveResult(src, templ, matching, filename);
}
{
RECT rect = { 0, 0, horz, vert };
{
st.
x = pos.
x - offset.
x; st.
y = pos.
y - offset.
y;
ed.
x = st.
x + width; ed.
y = st.
y + height;
_rect.SetPosition( rect.
st );
_rect.GetPen().SetColor(
RGB(0x00, 0x00, 0xFF));
str.
Format( _T(
"%d"), score );
str.
Format( _T(
"%d"), (
int)scale );
}
}