求积分图像

求积分图像的C函数实现。啥也不说了,直接上代码:

typedef unsigned char          U8;   
typedef unsigned short         U16; 
typedef unsigned int           U32;
typedef unsigned long long     U64;

typedef signed char            S8;
typedef signed short           S16;
typedef signed int             S32;
typedef signed long long       S64;


typedef float                  FL;
typedef double                 DB;
typedef void                   VD;

typedef unsigned char *         PU8;   
typedef unsigned short *        PU16; 
typedef unsigned int *          PU32;
typedef unsigned long long *    PU64;

typedef signed char *           PS8;
typedef signed short *          PS16;
typedef signed int *            PS32;
typedef signed long long *      PS64;</span>

/*****************************************************************************
 函 数 名  : ADA_CalcIntegralImg
 功能描述  : compute the integral img
 输入参数  : IN PU8 pucInputImg    
             IN U16 usImgWth       
             IN U16 usImgHgt       
             IN U16 usImgStp       
             OUT PU32 puiIgralImg  
 输出参数  : 无
 返 回 值  : 
 调用函数  : 
 被调函数  : 
 
 修改历史      :
  1.日    期   : 2015年1月14日星期三
    作    者   : schao
    修改内容   : 新生成函数

*****************************************************************************/
S32 ADA_CalcIntegralImg(IN PU8 pucInputImg,
                        IN U16 usImgWth,
                        IN U16 usImgHgt,
                        IN U16 usImgStp,
                        OUT PU32 puiIgralImg)</span>

{
    S32 iRetOK = ADA_OK;
        
	U16 usYIdx = 0;
	U16 usXIdx = 0;

	U32 uiTisRowPreTtl = 0;

    PU32 puiTmpPre = NULL;
	PU32 puiTmpTis = NULL;
	PU8  pucTmpInp = NULL;

    if(NULL == pucInputImg ||
       NULL == puiIgralImg)
    {
        return ADA_NO; 
    }

	puiTmpPre = puiIgralImg;
	puiTmpTis = puiIgralImg + usImgStp;
	pucTmpInp = pucInputImg + usImgStp;

    for(usXIdx = 0; usXIdx < usImgWth; usXIdx++)   /*先处理第一行*/
    {
        puiIgralImg[usXIdx] += uiTisRowPreTtl;
		
		uiTisRowPreTtl += pucInputImg[usXIdx];
    }

	/*处理剩余行*/
    for(usYIdx = 1; usYIdx < usImgHgt; usYIdx++)
    {
        uiTisRowPreTtl = 0;
		
	    for(usXIdx = 0; usXIdx < usImgWth; usXIdx++)
	    {
	        puiTmpTis[usXIdx] += uiTisRowPreTtl + puiTmpPre[usXIdx];
				
	    	uiTisRowPreTtl    += pucTmpInp[usXIdx];
	    }

		puiTmpPre += usImgStp;
		puiTmpTis += usImgStp;
		pucTmpInp += usImgStp;
    }

    return iRetOK;
}


你可能感兴趣的:(计算机视觉)