图像平滑-加权平均
  3LtouLW8lEKV 2023年11月02日 27 0


void CSDIELSView::OnSmoothingWeight()
{
//程序编制: 李立宗
//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;
//int M[3][3]={{1,2,1},{2,4,2},{1,2,1}};
int M[3][3]={{1,1,1},{1,2,1},{1,1,1}};
int sum=0;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
sum=sum+M[i][j];
// 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)*M[0][0]+*(pRealData+pit*(y-1)+(x)*bitCount)*M[0][1]+*(pRealData+pit*(y-1)+(x+1)*bitCount)*M[0][2]
+ *(pRealData+pit*(y)+(x-1)*bitCount)*M[1][0]+*(pRealData+pit*(y)+(x)*bitCount)*M[1][1]+*(pRealData+pit*(y)+(x+1)*bitCount)*M[1][2]
+*(pRealData+pit*(y+1)+(x-1)*bitCount)*M[2][0]+*(pRealData+pit*(y+1)+(x)*bitCount)*M[2][1]+*(pRealData+pit*(y+1)+(x+1)*bitCount)*M[2][2]
)/sum+0.5);
if(bitCount==1)
{
tempG=tempR;
tempB=tempR;
}
else
{
tempG=(int)((float)(
*(pRealData+pit*(y-1)+(x-1)*bitCount+1)*M[0][0]+*(pRealData+pit*(y-1)+(x)*bitCount+1)*M[0][1]+*(pRealData+pit*(y-1)+(x+1)*bitCount+1)*M[0][2]
+ *(pRealData+pit*(y)+(x-1)*bitCount+1)*M[1][0]+*(pRealData+pit*(y)+(x)*bitCount+1)*M[1][1]+*(pRealData+pit*(y)+(x+1)*bitCount+1)*M[1][2]
+*(pRealData+pit*(y+1)+(x-1)*bitCount+1)*M[2][0]+*(pRealData+pit*(y+1)+(x)*bitCount+1)*M[2][1]+*(pRealData+pit*(y+1)+(x+1)*bitCount+1)*M[2][2]
)/sum+0.5);
tempB=(int)((float)(
*(pRealData+pit*(y-1)+(x-1)*bitCount+2)*M[0][0]+*(pRealData+pit*(y-1)+(x)*bitCount+2)*M[0][1]+*(pRealData+pit*(y-1)+(x+1)*bitCount+2)*M[0][2]
+ *(pRealData+pit*(y)+(x-1)*bitCount+2)*M[1][0]+*(pRealData+pit*(y)+(x)*bitCount+2)*M[1][1]+*(pRealData+pit*(y)+(x+1)*bitCount+2)*M[1][2]
+*(pRealData+pit*(y+1)+(x-1)*bitCount+2)*M[2][0]+*(pRealData+pit*(y+1)+(x)*bitCount+2)*M[2][1]+*(pRealData+pit*(y+1)+(x+1)*bitCount+2)*M[2][2]
)/sum+0.5);

}

*(pRealData2+pit2*y+x*bitCount2)=tempR;
*(pRealData2+pit2*y+x*bitCount2+1)=tempG;
*(pRealData2+pit2*y+x*bitCount2+2)=tempB;
}
}
Invalidate();
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: 信息安全类公司 下一篇: 图像镜像
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  rEZj93RghFYQ   2023年11月02日   21   0   0 i++leetcode-java
  3LtouLW8lEKV   2023年11月02日   27   0   0 自定义位图nullbyte
  dUbcXj9lnElT   2023年11月02日   30   0   0 #includei++c++
  dUbcXj9lnElT   2023年11月02日   19   0   0 #include连通块i++
3LtouLW8lEKV
最新推荐 更多