⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cvpyramids.c

📁 Xilinx ISE&EDK 8.2平台的人脸检测系统设计
💻 C
📖 第 1 页 / 共 5 页
字号:
    buf_size = MAX(src_size.width,src_size.height) * sizeof(buf[0]) * 2 * channels;     \
    if( buf_size > (1 << 14) )                                                          \
    {                                                                                   \
        buf = (worktype*)cvAlloc( buf_size );                                           \
        if( !buf )                                                                      \
            return CV_OUTOFMEM_ERR;                                                     \
    }                                                                                   \
    else                                                                                \
    {                                                                                   \
        buf = (worktype*)cvAlignPtr(alloca( buf_size+8 ), 8);                           \
        local_alloc = 1;                                                                \
    }                                                                                   \
                                                                                        \
    buf0 = buf;                                                                         \
                                                                                        \
    src_step /= sizeof(src[0]);                                                         \
    dst_step /= sizeof(dst[0]);                                                         \
                                                                                        \
    cols = (W & 1) + (Wd*2 > W);                                                        \
    rows = (H & 1) + (Hd*2 > H);                                                        \
                                                                                        \
    src2 = src + (H-1)*src_step;                                                        \
    dst2 = dst + (Hd - rows)*dst_step;                                                  \
    src += (W - 1)*channels;                                                            \
    dst += (Wd - cols)*channels;                                                        \
                                                                                        \
    /* part of row(column) from 1 to Wd_(Hd_) is processed using PD_FILTER macro */     \
    Wd_ = Wd - 1 + (cols == 1 && (W & 1) != 0);                                         \
    Hd_ = Hd - 1 + (rows == 1 && (H & 1) != 0);                                         \
                                                                                        \
    bufW = channels * cols;                                                             \
                                                                                        \
    /******************* STAGE 1. ******************/                                   \
                                                                                        \
    /* do horizontal convolution of the 1-2 right columns and write results to buffer */\
    if( cols > 0 )                                                                      \
    {                                                                                   \
        if( W <= 2 )                                                                    \
        {                                                                               \
            assert( Wd == 1 );                                                          \
            for( i = 0; i < H; i++, src += src_step, buf += channels )                  \
            {                                                                           \
                if( channels == 1 )                                                     \
                    buf[0] = PD_SINGULAR( src[1-Wn], src[0] );                          \
                else                                                                    \
                {                                                                       \
                    buf[0] = PD_SINGULAR( src[3-Wn], src[0] );                          \
                    buf[1] = PD_SINGULAR( src[4-Wn], src[1] );                          \
                    buf[2] = PD_SINGULAR( src[5-Wn], src[2] );                          \
                }                                                                       \
            }                                                                           \
        }                                                                               \
        else if( W == 3 && Wd == 1 || W > 3 && !(Wd & 1) )                              \
        {                                                                               \
            for( i = 0; i < H; i++, src += src_step, buf += channels )                  \
            {                                                                           \
                if( channels == 1 )                                                     \
                    buf[0] = PD_LT( src[-2], src[-1], src[0] );                         \
                else                                                                    \
                {                                                                       \
                    buf[0] = PD_LT( src[-6], src[-3], src[0] );                         \
                    buf[1] = PD_LT( src[-5], src[-2], src[1] );                         \
                    buf[2] = PD_LT( src[-4], src[-1], src[2] );                         \
                }                                                                       \
            }                                                                           \
        }                                                                               \
        else if( W == 3 )                                                               \
        {                                                                               \
            for( i = 0; i < H; i++, src += src_step, buf += channels*2 )                \
            {                                                                           \
                if( channels == 1 )                                                     \
                {                                                                       \
                    buf[0] = PD_LT( src[-2], src[-1], src[0] );                         \
                    buf[1] = PD_LT( src[0], src[-1], src[-2] );                         \
                }                                                                       \
                else                                                                    \
                {                                                                       \
                    buf[0] = PD_LT( src[-6], src[-3], src[0] );                         \
                    buf[1] = PD_LT( src[-5], src[-2], src[1] );                         \
                    buf[2] = PD_LT( src[-4], src[-1], src[2] );                         \
                    buf[3] = PD_LT( src[0], src[-3], src[-6] );                         \
                    buf[4] = PD_LT( src[1], src[-2], src[-5] );                         \
                    buf[5] = PD_LT( src[2], src[-1], src[-4] );                         \
                }                                                                       \
            }                                                                           \
        }                                                                               \
        else if( cols == 1 )                                                            \
        {                                                                               \
            for( i = 0; i < H; i++, src += src_step, buf += channels )                  \
            {                                                                           \
                if( channels == 1 )                                                     \
                    buf[0] = PD_FILTER( src[-4], src[-3], src[-2], src[-1], src[0]);    \
                else                                                                    \
                {                                                                       \
                    buf[0] = PD_FILTER( src[-12], src[-9], src[-6], src[-3], src[0]);   \
                    buf[1] = PD_FILTER( src[-11], src[-8], src[-5], src[-2], src[1]);   \
                    buf[2] = PD_FILTER( src[-10], src[-7], src[-4], src[-1], src[2]);   \
                }                                                                       \
            }                                                                           \
        }                                                                               \
        else                                                                            \
        {                                                                               \
            for( i = 0; i < H; i++, src += src_step, buf += channels*2 )                \
            {                                                                           \
                if( channels == 1 )                                                     \
                {                                                                       \
                    buf[0] = PD_FILTER( src[-4], src[-3], src[-2], src[-1], src[0] );   \
                    buf[1] = PD_LT( src[0], src[-1], src[-2] );                         \
                }                                                                       \
                else                                                                    \
                {                                                                       \
                    buf[0] = PD_FILTER( src[-12], src[-9], src[-6], src[-3], src[0] );  \
                    buf[1] = PD_FILTER( src[-11], src[-8], src[-5], src[-2], src[1] );  \
                    buf[2] = PD_FILTER( src[-10], src[-7], src[-4], src[-1], src[2] );  \
                    buf[3] = PD_LT( src[0], src[-3], src[-6] );                         \
                    buf[4] = PD_LT( src[1], src[-2], src[-5] );                         \
                    buf[5] = PD_LT( src[2], src[-1], src[-4] );                         \
                }                                                                       \
            }                                                                           \
        }                                                                               \
        buf = buf0;                                                                     \
    }                                                                                   \
                                                                                        \
    src = src2;                                                                         \
                                                                                        \
    /******************* STAGE 2. ******************/                                   \
                                                                                        \
    /* do vertical convolution of the pre-processed right columns, */                   \
    /* stored in buffer, and write results to the destination */                        \
    /* do vertical convolution of the 1-2 bottom rows */                                \
    /* and write results to the buffer */                                               \
    if( H <= 2 )                                                                        \
    {                                                                                   \
        if( cols > 0 )                                                                  \
        {                                                                               \
            assert( Hd == 1 );                                                          \
            for( j = 0; j < bufW; j++ )                                                 \
                dst[j] = (arrtype)_pd_scale_( PD_SINGULAR( buf[j], buf[j+(H-1)*bufW] ));\
        }                                                                               \
                                                                                        \
        if( rows > 0 )                                                                  \
        {                                                                               \
            for( j = 0; j < Wn; j++ )                                                   \
                buf[j] = PD_SINGULAR( src[j-src_step], src[j] );                        \
        }                                                                               \
    }                                                                                   \
    else if( H == 3 )                                                                   \
    {                                                                                   \
        if( cols > 0 )                                                                  \
        {                                                                               \
            for( j = 0; j < bufW; j++ )                                                 \
            {                                                                           \
                dst[j]= (arrtype)_pd_scale_(PD_LT( buf[j], buf[j+bufW], buf[j+bufW*2]));\
            }                                                                           \
            if( Hd == 2 )                                                               \
            {                                                                           \
                dst += dst_step;                                                        \
                for( j = 0; j < bufW; j++ )                                             \
                    dst[j] = (arrtype)_pd_scale_( PD_LT( buf[j+bufW*2],                 \
                                                  buf[j+bufW], buf[j] ));               \
            }                                                                           \
        }                                                                               \
                                                                                        \
        if( Hd == 1 )                                                                   \
        {                                                                               \
            for( j = 0; j < Wn; j++ )                                                   \
                buf[j] = PD_LT( src[j-src_step*2], src[j - src_step], src[j] );         \
        }                                                                               \
        else                                                                            \
        {                                                                               \
            for( j = 0; j < Wn; j++ )                                                   \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -