失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > RGB图像中值平滑和均值平滑

RGB图像中值平滑和均值平滑

时间:2021-03-03 13:43:25

相关推荐

RGB图像中值平滑和均值平滑

中值平滑:

void MedianSmooth(BYTE* pSrc,BYTE* pDest,int nWidth,int nHeight,unsigned int Ksize)

{

int k2 = Ksize/2;

int kmax= Ksize-k2;

int i,j,k;

int nStride = nWidth*3;

RGBQUAD* kernel = (RGBQUAD*)malloc(Ksize*Ksize*sizeof(RGBQUAD));

for(int y=0; y<nHeight; y++)

{

for(int x=0; x<nWidth; x++)

{

for(j=-k2, i=0;j<kmax;j++)

{

for(k=-k2;k<kmax;k++)

{

if (IsPointInside(x+j,y+k,nWidth,nHeight))

{

int nXpos = (x+j)*3;

int nYpos = (y+k)*nStride;

int nPos = nYpos + nXpos;

int n = i++;

kernel[n].rgbBlue = pSrc[nPos];

kernel[n].rgbGreen = pSrc[nPos + 1];

kernel[n].rgbRed = pSrc[nPos + 2];

}

}

}

qsort(kernel, i, sizeof(RGBQUAD), CompareColors);

int nMid = i/2;

int nDstXpos = x*3;

int nDstYpos = y*nStride;

int nDstPos = nDstYpos + nDstXpos;

pDest[nDstPos] = kernel[nMid].rgbBlue;

pDest[nDstPos + 1] = kernel[nMid].rgbGreen;

pDest[nDstPos + 2] = kernel[nMid].rgbRed;

}

}

free(kernel);

}

均值平滑:

void AverageSmooth(BYTE* pSrc,BYTE* pDest,int nWidth,int nHeight,unsigned int Ksize)

{

int k2 = Ksize/2;

int kmax= Ksize-k2;

int i,j,k;

int nStride = nWidth*3;

int nTotalRed = 0;

int nTotalGreen = 0;

int nTotalBlue = 0;

for(int y=0; y<nHeight; y++)

{

for(int x=0; x<nWidth; x++)

{

for(j=-k2, i=0;j<kmax;j++)

{

for(k=-k2;k<kmax;k++)

{

if (IsPointInside(x+j,y+k,nWidth,nHeight))

{

int nXpos = (x+j)*3;

int nYpos = (y+k)*nStride;

int nPos = nYpos + nXpos;

int n = i++;

nTotalBlue += pSrc[nPos];

nTotalGreen += pSrc[nPos + 1];

nTotalRed += pSrc[nPos + 2];

}

}

}

int nDstXpos = x*3;

int nDstYpos = y*nStride;

int nDstPos = nDstYpos + nDstXpos;

pDest[nDstPos] = nTotalBlue/i;

pDest[nDstPos + 1] = nTotalGreen/i;

pDest[nDstPos + 2] = nTotalRed/i;

nTotalRed = 0;

nTotalGreen = 0;

nTotalBlue = 0;

}

}

}

如果觉得《RGB图像中值平滑和均值平滑》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。