void CSDIELSView::OnSmoothingNeighbour()
{
//程序编制:李立宗
//2012-8-8
if(myImage1.IsNull())
OnOpenResourceFile();
if(!myImage2.IsNull())
myImage2.Destroy();
if(myImage2.IsNull()){
myImage2.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0);
}
//COLORREF pixel;
int maxY = myImage1.GetHeight();
int maxX=myImage1.GetWidth();
byte* pRealData;
byte* pRealData2;
pRealData=(byte*)myImage1.GetBits();
pRealData2=(byte*)myImage2.GetBits();
int pit=myImage1.GetPitch();
int pit2=myImage2.GetPitch();
//需要注意,pit和pit2的值并不一样,所以如果使用一个值,会导致不同的结果出现
//CString str;
//str.Format(TEXT("%d"),pit);
//MessageBox(str);
//str.Format(TEXT("%d"),pit2);
//MessageBox(str);
int bitCount=myImage1.GetBPP()/8;
int bitCount2=myImage2.GetBPP()/8;
int tempR,tempG,tempB;
int temp,tempX,tempY;
// tempR=tempG=tempG=0;
//说明:将生产的图像作为24位图处理。
for (int y=1; y<maxY-1; y++) {
for (int x=1; x<maxX-1; x++) {
tempR=(int)((float)(
*(pRealData+pit*(y-1)+(x-1)*bitCount)+*(pRealData+pit*(y-1)+(x)*bitCount)+*(pRealData+pit*(y-1)+(x+1)*bitCount)
+ *(pRealData+pit*(y)+(x-1)*bitCount)+*(pRealData+pit*(y)+(x)*bitCount)+*(pRealData+pit*(y)+(x+1)*bitCount)
+*(pRealData+pit*(y+1)+(x-1)*bitCount)+*(pRealData+pit*(y+1)+(x)*bitCount)+*(pRealData+pit*(y+1)+(x+1)*bitCount)
)/9+0.5);
if(bitCount==1)
{
tempG=tempR;
tempB=tempR;
}
else
{
tempG=(int)((float)(
*(pRealData+pit*(y-1)+(x-1)*bitCount+1)+*(pRealData+pit*(y-1)+(x)*bitCount+1)+*(pRealData+pit*(y-1)+(x+1)*bitCount+1)
+ *(pRealData+pit*(y)+(x-1)*bitCount+1)+*(pRealData+pit*(y)+(x)*bitCount+1)+*(pRealData+pit*(y)+(x+1)*bitCount+1)
+*(pRealData+pit*(y+1)+(x-1)*bitCount+1)+*(pRealData+pit*(y+1)+(x)*bitCount+1)+*(pRealData+pit*(y+1)+(x+1)*bitCount+1)
)/9+0.5);
tempB=(int)((float)(
*(pRealData+pit*(y-1)+(x-1)*bitCount+1)+*(pRealData+pit*(y-1)+(x)*bitCount+1)+*(pRealData+pit*(y-1)+(x+1)*bitCount+1)
+ *(pRealData+pit*(y)+(x-1)*bitCount+1)+*(pRealData+pit*(y)+(x)*bitCount+1)+*(pRealData+pit*(y)+(x+1)*bitCount+1)
+*(pRealData+pit*(y+1)+(x-1)*bitCount+1)+*(pRealData+pit*(y+1)+(x)*bitCount+1)+*(pRealData+pit*(y+1)+(x+1)*bitCount+1)
)/9+0.5);
}
*(pRealData2+pit2*y+x*bitCount2)=tempR;
*(pRealData2+pit2*y+x*bitCount2+1)=tempG;
*(pRealData2+pit2*y+x*bitCount2+2)=tempB;
}
}
Invalidate();
}
图像平滑-邻域平均法
原创
©著作权归作者所有:来自51CTO博客作者superdont的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:MFC实现图像选择式掩膜平滑
下一篇:VC编译程序时Cannot open precompiled header file: 'Debug/.pch': No such file or directory错误处理
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Matalb-邻域平均法、均值滤波法、中值滤波法对图像进行平滑去噪
文章目录1. 空间滤波增强2. 平滑滤波器3. 邻域平均法4. 均值滤波法5. 中值滤波
均值算法 计算机视觉 图像处理 邻域 均值滤波 -
图像平滑-加权平均
void CSDIELSView::OnSmoothingWeight(){//程序
float byte i++ 位图 mpx -
邻域平均 python 邻域平均滤波邻域平均 python