下図の2値画像を2値ブローブ解析して得られたリージョンにより処理対象画像の輝度統計を算出する処理です。
処理時間:
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
- サンプルコード:
void StatisticsEx()
{
#ifdef _UNICODE
typedef std::wstring _TSTRING;
#else
typedef std::string _TSTRING;
#endif
double msec;
std::map<_TSTRING, double> times;
{
times[_T("FVCL.Blob.CFvBlob")] = msec;
}
{
filters[0].SetMin(100);
times[_T("FVCL.Blob.GetList")] = msec;
}
{
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++)
{
{
data.SetBlobNo( blob_numbers[i] );
data.GetRegion(®ion);
stat = parser.Result;
}
_tprintf(_T("[%03d] %5d,%9.0f,%9.3f,%9.3f,%9.3f,%9.3f,%9.3f\n"),
}
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());
}
}