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 + -
显示快捷键?