求积分图像的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;
}