WIL説明書(C++)  3.0.0

下図の2値画像を2値ブローブ解析して得られたリージョンにより処理対象画像の輝度統計を算出する処理です。

【処理対象】 【2値画像】
key_UC8_M.png
key_BIN_M.png
【リージョン】
Measure.StatisticsEx.png

処理時間:

    0.082 msec : FVCL.Blob.CFvBlob
    0.021 msec : FVCL.Blob.GetList
    0.005 msec : FVCL.Blob.GetSortList
    0.121 msec : FVCL.Measure.CFvStatisticsEx


処理結果:

No.  ,Count,      Sum,     Mean,      Min,      Max,    Sigma,      Var
[000]  2320,   349602,  150.691,   75.000,  237.000,   23.030,  530.361
[001]  1967,   203810,  103.615,   75.000,  222.000,   16.912,  285.999
[002]  1874,   221519,  118.207,   75.000,  238.000,   19.180,  367.871
[003]  2341,   308658,  131.849,   75.000,  220.000,   24.010,  576.476
[004]   420,    61335,  146.036,   75.000,  236.000,   23.031,  530.430
[005]   428,    63780,  149.019,   75.000,  249.000,   29.004,  841.210
[006]   426,    53726,  126.117,   75.000,  205.000,   17.404,  302.906


サンプルコード:
// $Revision: 1.5 $
void StatisticsEx()
{
#ifdef _UNICODE
typedef std::wstring _TSTRING;
#else
typedef std::string _TSTRING;
#endif
FVCL::Data::CFvImage src(_T("./key_UC8_M.png"));
FVCL::Data::CFvImage bin(_T("./key_BIN_M.png"));
double msec;
std::map<_TSTRING, double> times;
// --------------------------------------------------
// 2値ブローブ解析.
{
watch.Start();
FVCL::Blob::CFvBlob parser(&bin, &result);
FVCL::Blob::CFvBlobParam& param = parser.GetParam();
parser.Execute();
msec = watch.Stop();
times[_T("FVCL.Blob.CFvBlob")] = msec;
}
// --------------------------------------------------
// 2値ブローブ解析結果のフィルタリングとソート.
FHANDLE hresult = result.GetHandle();
FVCL::Blob::CFvBlobData data(hresult, 0);
FVCL::CFvBuffer<UINT> blob_numbers;
{
watch.Start();
filters.resize(1);
filters[0].SetType(FVCL::Blob::FeatureType::AREA);
filters[0].SetMin(100);
filters[0].SetMax(FVCL::TypeRange::INT::Upper);
FVCL::Blob::GetList(hresult, filters, &blob_numbers);
msec = watch.Stop();
times[_T("FVCL.Blob.GetList")] = msec;
}
{
watch.Start();
msec = watch.Stop();
times[_T("FVCL.Blob.GetSortList")] = msec;
}
// --------------------------------------------------
// 計測.
{
_tprintf(_T("%-5s,%5s,%9s,%9s,%9s,%9s,%9s,%9s\n"),
_T("No."), _T("Count"), _T("Sum"), _T("Mean"), _T("Min"), _T("Max"), _T("Sigma"), _T("Var"));
msec = 0;
for(UINT i = 0 ; i<blob_numbers.size() ; i++)
{
watch.Start();
{
data.SetBlobNo( blob_numbers[i] );
data.GetRegion(&region);
parser.Execute( region, FVCL::OriginMode::Image );
stat = parser.Result;
}
msec += watch.Stop();
_tprintf(_T("[%03d] %5d,%9.0f,%9.3f,%9.3f,%9.3f,%9.3f,%9.3f\n"),
i, stat.Count, stat.Sum, stat.Mean, stat.Min, stat.Max, stat.Sigma, stat.Variance);
}
times[_T("FVCL.Measure.CFvStatisticsEx")] = msec;
}
// --------------------------------------------------
_tprintf(_T("\n"));
for(std::map<_TSTRING, double>::iterator iter = times.begin() ; iter != times.end() ; iter++)
{
_tprintf(_T("%9.3f msec : %s\n"), iter->second, iter->first.c_str());
}
}

Documentation copyright © 2007 FAST Corporation. [B-001864]
Generated on 2023年11月02日(木) 10時12分56秒 for WIL説明書(C++) by doxygen 1.8.11