图片边缘也处理的代码:
void MeanFilter(unsigned char *pImg,int width,int height,int kernel)
{
//卷积核为奇数
if (pImg==NULL||width<=0||height<=0||kernel<=0||kernel%2==0)
{
printf("The arguments send to function MeanFilter Error!\n")
return;
}
unsigned char *pTempImg = new unsigned char[width*height*sizeof(unsigned char)];
if (pTempImg==NULL)
{
printf("New pTempImg memory failed in funciton MeanFilter!\n");
return;
}
long sum = 0;
int m,n;
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)
{
sum = 0;
for (int k=i-kernel/2;k<=i+kernel/2;k++)
{
m = k;
if (m<0)
{
m = 0;
}
else if (m>=height)
{
m = height - 1;
}
for (int t=j-kernel/2;t<=j+kernel/2;t++)
{
n = t;
if (n<0)
{
n = 0;
}
else if (n>=width)
{
n = width -1;
}
sum += pImg[m*width+n];
}
}
sum = sum/(kernel*kernel);
pTempImg[i*width+j] = (unsigned char)sum;
}
}
memcpy(pImg,pTempImg,width*height*sizeof(unsigned char));
if (pTempImg!=NULL)
{
delete []pTempImg;
pTempImg = NULL;
}
}
图像边缘不处理的代码:
void MeanFilter(unsigned char *pImg,int width,int height,int kernel)
{
//卷积核为奇数
if (pImg==NULL||width<=0||height<=0||kernel<=0||kernel%2==0)
{
printf("The arguments send to function MeanFilter Error!\n")
return;
}
unsigned char *pTempImg = new unsigned char[width*height*sizeof(unsigned char)];
if (pTempImg==NULL)
{
printf("New pTempImg memory failed in funciton MeanFilter!\n");
return;
}
long sum = 0;
memcpy(pTempImg,pImg,width*height*sizeof(unsigned char));
for (int i=kernel/2;i<height-kernel/2;i++)
{
for (int j=kernel/2;j<width-kernel/2;j++)
{
sum = 0;
for(int m=i-kernel/2;m<=i+kernel/2;m++)
{
for(int n=j-kernel/2;n<=j+kernel/2;n++)
{
sum += pImg[m*width+n];
}
}
sum = sum/(kernel*kernel);
pTempImg[i*width+j] = (unsigned char)sum;
}
}
memcpy(pImg,pTempImg,width*height*sizeof(unsigned char));
if (pTempImg!=NULL)
{
delete []pTempImg;
pTempImg = NULL;
}
}