cvmeansdv.cpp.svn-base
来自「非结构化路识别」· SVN-BASE 代码 · 共 683 行 · 第 1/3 页
SVN-BASE
683 行
acctype, accsqtype, src, mask, size.width, sum, sqsum, pix, cn);\
} \
\
_exit_( pix, 1 ); \
\
return CV_OK; \
}
#define CV_IMPL_MEAN_SDV_ALL( flavor, srctype, sumtype, sumsqtype, temptype, \
acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_FUNC_2D( CV_MEAN_SDV_ENTRY, CV_MEAN_SDV_EXIT, \
flavor, 1, srctype, sumtype, \
sumsqtype, temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_FUNC_2D( CV_MEAN_SDV_ENTRY, CV_MEAN_SDV_EXIT, \
flavor, 2, srctype, sumtype, \
sumsqtype, temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_FUNC_2D( CV_MEAN_SDV_ENTRY, CV_MEAN_SDV_EXIT, \
flavor, 3, srctype, sumtype, \
sumsqtype, temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_FUNC_2D( CV_MEAN_SDV_ENTRY, CV_MEAN_SDV_EXIT, \
flavor, 4, srctype, sumtype, \
sumsqtype, temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_FUNC_2D_COI( CV_MEAN_SDV_ENTRY, CV_MEAN_SDV_EXIT, \
flavor, srctype, sumtype, \
sumsqtype, temptype, acctype, accsqtype )
#define CV_IMPL_MEAN_SDV_MASK_ALL( flavor, srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_MASK_FUNC_2D( CV_AND, CV_MEAN_SDV_MASK_ENTRY, CV_MEAN_SDV_EXIT, \
flavor, 1, srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_MASK_FUNC_2D( CV_AND, CV_MEAN_SDV_MASK_ENTRY, CV_MEAN_SDV_EXIT, \
flavor, 2, srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_MASK_FUNC_2D( CV_AND, CV_MEAN_SDV_MASK_ENTRY, CV_MEAN_SDV_EXIT, \
flavor, 3, srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_MASK_FUNC_2D( CV_AND, CV_MEAN_SDV_MASK_ENTRY, CV_MEAN_SDV_EXIT, \
flavor, 4, srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_MASK_FUNC_2D_COI( CV_AND, CV_MEAN_SDV_MASK_ENTRY, CV_MEAN_SDV_EXIT,\
flavor, srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype )
#define CV_IMPL_MEAN_SDV_MASK_ALL_FLT( flavor, srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_MASK_FUNC_2D( CV_MULMASK1, CV_MEAN_SDV_MASK_ENTRY_FLT, \
CV_MEAN_SDV_EXIT, flavor, 1, \
srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_MASK_FUNC_2D( CV_MULMASK1, CV_MEAN_SDV_MASK_ENTRY_FLT, \
CV_MEAN_SDV_EXIT, flavor, 2, \
srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_MASK_FUNC_2D( CV_MULMASK1, CV_MEAN_SDV_MASK_ENTRY_FLT, \
CV_MEAN_SDV_EXIT, flavor, 3, \
srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_MASK_FUNC_2D( CV_MULMASK1, CV_MEAN_SDV_MASK_ENTRY_FLT, \
CV_MEAN_SDV_EXIT, flavor, 4, \
srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype ) \
\
CV_IMPL_MEAN_SDV_MASK_FUNC_2D_COI( CV_MULMASK1, CV_MEAN_SDV_MASK_ENTRY_FLT, \
CV_MEAN_SDV_EXIT, flavor, \
srctype, sumtype, sumsqtype, \
temptype, acctype, accsqtype )
CV_IMPL_MEAN_SDV_ALL( 8u, uchar, int64, int64, int, int, int )
CV_IMPL_MEAN_SDV_ALL( 8s, char, int64, int64, int, int, int )
CV_IMPL_MEAN_SDV_ALL( 16s, short, int64, int64, int, int, int64 )
CV_IMPL_MEAN_SDV_ALL( 32s, int, double, double, double, double, double )
CV_IMPL_MEAN_SDV_ALL( 32f, float, double, double, double, double, double )
CV_IMPL_MEAN_SDV_ALL( 64f, double, double, double, double, double, double )
CV_IMPL_MEAN_SDV_MASK_ALL( 8u, uchar, int64, int64, int, int, int )
CV_IMPL_MEAN_SDV_MASK_ALL( 8s, char, int64, int64, int, int, int )
CV_IMPL_MEAN_SDV_MASK_ALL( 16s, short, int64, int64, int, int, int64 )
CV_IMPL_MEAN_SDV_MASK_ALL_FLT( 32s, int, double, double, double, double, double )
CV_IMPL_MEAN_SDV_MASK_ALL_FLT( 32f, float, double, double, double, double, double )
CV_IMPL_MEAN_SDV_MASK_ALL_FLT( 64f, double, double, double, double, double, double )
CV_DEF_INIT_BIG_FUNC_TAB_2D( Mean_StdDev, R )
CV_DEF_INIT_FUNC_TAB_2D( Mean_StdDev, CnCR )
CV_DEF_INIT_BIG_FUNC_TAB_2D( Mean_StdDev, MR )
CV_DEF_INIT_FUNC_TAB_2D( Mean_StdDev, CnCMR )
CV_IMPL void
cvAvgSdv( const void* img, CvScalar* _mean, CvScalar* _sdv, const void* mask )
{
CvScalar mean = {{0,0,0,0}};
CvScalar sdv = {{0,0,0,0}};
static CvBigFuncTable meansdv_tab;
static CvFuncTable meansdvcoi_tab;
static CvBigFuncTable meansdvmask_tab;
static CvFuncTable meansdvmaskcoi_tab;
static int inittab = 0;
CV_FUNCNAME("cvMean_StdDev");
__BEGIN__;
int type, coi = 0;
int mat_step, mask_step = 0;
CvSize size;
CvMat stub, maskstub, *mat = (CvMat*)img, *matmask = (CvMat*)mask;
if( !inittab )
{
icvInitMean_StdDevRTable( &meansdv_tab );
icvInitMean_StdDevCnCRTable( &meansdvcoi_tab );
icvInitMean_StdDevMRTable( &meansdvmask_tab );
icvInitMean_StdDevCnCMRTable( &meansdvmaskcoi_tab );
inittab = 1;
}
CV_CALL( mat = cvGetMat( mat, &stub, &coi ));
type = CV_MAT_TYPE( mat->type );
size = icvGetMatSize( mat );
mat_step = mat->step;
if( !mask )
{
if( CV_IS_MAT_CONT( mat->type ))
{
size.width *= size.height;
size.height = 1;
mat_step = CV_STUB_STEP;
}
if( CV_MAT_CN(type) == 1 || coi == 0 )
{
CvFunc2D_1A2P func = (CvFunc2D_1A2P)(meansdv_tab.fn_2d[type]);
if( !func )
CV_ERROR( CV_StsBadArg, icvUnsupportedFormat );
IPPI_CALL( func( mat->data.ptr, mat_step, size, mean.val, sdv.val ));
}
else
{
CvFunc2DnC_1A2P func = (CvFunc2DnC_1A2P)
(meansdvcoi_tab.fn_2d[CV_MAT_DEPTH(type)]);
if( !func )
CV_ERROR( CV_StsBadArg, icvUnsupportedFormat );
IPPI_CALL( func( mat->data.ptr, mat_step, size,
CV_MAT_CN(type), coi, mean.val, sdv.val ));
}
}
else
{
CV_CALL( matmask = cvGetMat( matmask, &maskstub ));
mask_step = matmask->step;
if( !CV_IS_MASK_ARR( matmask ))
CV_ERROR( CV_StsBadMask, "" );
if( !CV_ARE_SIZES_EQ( mat, matmask ))
CV_ERROR( CV_StsUnmatchedSizes, "" );
if( CV_IS_MAT_CONT( mat->type & matmask->type ))
{
size.width *= size.height;
size.height = 1;
mat_step = mask_step = CV_STUB_STEP;
}
if( CV_MAT_CN(type) == 1 || coi == 0 )
{
CvFunc2D_2A2P func = (CvFunc2D_2A2P)(meansdvmask_tab.fn_2d[type]);
if( !func )
CV_ERROR( CV_StsBadArg, icvUnsupportedFormat );
IPPI_CALL( func( mat->data.ptr, mat_step, matmask->data.ptr,
mask_step, size, mean.val, sdv.val ));
}
else
{
CvFunc2DnC_2A2P func = (CvFunc2DnC_2A2P)
(meansdvmaskcoi_tab.fn_2d[CV_MAT_DEPTH(type)]);
if( !func )
CV_ERROR( CV_StsBadArg, icvUnsupportedFormat );
IPPI_CALL( func( mat->data.ptr, mat_step,
matmask->data.ptr, mask_step,
size, CV_MAT_CN(type), coi, mean.val, sdv.val ));
}
}
__END__;
if( _mean )
*_mean = mean;
if( _sdv )
*_sdv = sdv;
}
/* End of file */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?