分享

图像锐化拉普拉斯vc代码

 x小登 2016-10-16



  1. void CSDIELSView::OnSharpeningLaplace()  
  2.     {  
  3. //程序编制:李立宗  lilizong@gmail.com  
  4. //2012-8-11  
  5.         if(myImage1.IsNull())  
  6.             OnOpenResourceFile();  
  7.         if(!myImage2.IsNull())  
  8.             myImage2.Destroy();  
  9.         if(myImage2.IsNull()){  
  10.             myImage2.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0);  
  11.         }  
  12.         //COLORREF pixel;   
  13.         int maxY = myImage1.GetHeight();  
  14.         int maxX=myImage1.GetWidth();  
  15.         byte* pRealData;  
  16.         byte* pRealData2;  
  17.         pRealData=(byte*)myImage1.GetBits();  
  18.         pRealData2=(byte*)myImage2.GetBits();  
  19.         int pit=myImage1.GetPitch();  
  20.         int pit2=myImage2.GetPitch();  
  21.         //需要注意,pit和pit2的值并不一样,所以如果使用一个值,会导致不同的结果出现  
  22.         //CString str;  
  23.         //str.Format(TEXT("%d"),pit);  
  24.         //MessageBox(str);  
  25.         //str.Format(TEXT("%d"),pit2);  
  26.         //MessageBox(str);  
  27.         int bitCount=myImage1.GetBPP()/8;  
  28.         int bitCount2=myImage2.GetBPP()/8;  
  29.         int tempR,tempG,tempB;  
  30.         int tempX,tempY;  
  31.         int temp;  
  32.         //int M[3][3]={{1,2,1},{2,4,2},{1,2,1}};  
  33.         int t=100; //门限  
  34.         //  tempR=tempG=tempG=0;  
  35.         //说明:将生产的图像作为24位图处理。  
  36.         for (int y=1; y<maxY-1; y++) {  
  37.             for (int x=1; x<maxX-1; x++) {  
  38.                 temp=  
  39.                     *(pRealData+pit*(y-1)+(x-1)*bitCount)+*(pRealData+pit*(y-1)+(x)*bitCount)+*(pRealData+pit*(y-1)+(x+1)*bitCount)  
  40.                     +*(pRealData+pit*(y)+(x-1)*bitCount)-8*(*(pRealData+pit*(y)+(x)*bitCount))+*(pRealData+pit*(y)+(x+1)*bitCount)  
  41.                     +*(pRealData+pit*(y+1)+(x-1)*bitCount)+*(pRealData+pit*(y+1)+(x)*bitCount)+*(pRealData+pit*(y+1)+(x+1)*bitCount);  
  42.                 temp=abs(temp);  
  43.                 if(temp>255)  
  44.                     tempR=255;  
  45.                 else  
  46.                     tempR=temp;  
  47.                 if(bitCount==1)  
  48.                 {  
  49.                     tempG=tempR;  
  50.                     tempB=tempR;  
  51.                 }  
  52.                 else  
  53.                 {  
  54.                                     temp=  
  55.                     *(pRealData+pit*(y-1)+(x-1)*bitCount+1)+*(pRealData+pit*(y-1)+(x)*bitCount+1)+*(pRealData+pit*(y-1)+(x+1)*bitCount+1)  
  56.                     +*(pRealData+pit*(y)+(x-1)*bitCount+1)-8*(*(pRealData+pit*(y)+(x)*bitCount+1))+*(pRealData+pit*(y)+(x+1)*bitCount+1)  
  57.                     +*(pRealData+pit*(y+1)+(x-1)*bitCount+1)+*(pRealData+pit*(y+1)+(x)*bitCount+1)+*(pRealData+pit*(y+1)+(x+1)*bitCount+1);  
  58.                 temp=abs(temp);  
  59.                 if(temp>255)  
  60.                     tempG=255;  
  61.                 else  
  62.                     tempG=temp;  
  63.   
  64.   
  65.                                 temp=  
  66.                     *(pRealData+pit*(y-1)+(x-1)*bitCount+2)+*(pRealData+pit*(y-1)+(x)*bitCount+2)+*(pRealData+pit*(y-1)+(x+1)*bitCount+2)  
  67.                     +*(pRealData+pit*(y)+(x-1)*bitCount+2)-8*(*(pRealData+pit*(y)+(x)*bitCount+2))+*(pRealData+pit*(y)+(x+1)*bitCount+2)  
  68.                     +*(pRealData+pit*(y+1)+(x-1)*bitCount+2)+*(pRealData+pit*(y+1)+(x)*bitCount+2)+*(pRealData+pit*(y+1)+(x+1)*bitCount+2);  
  69.                 temp=abs(temp);  
  70.                 if(temp>255)  
  71.                     tempB=255;  
  72.                 else  
  73.                     tempB=temp;  
  74.                 }  
  75.   
  76.                 *(pRealData2+pit2*y+x*bitCount2)=tempR;  
  77.                 *(pRealData2+pit2*y+x*bitCount2+1)=tempG;  
  78.                 *(pRealData2+pit2*y+x*bitCount2+2)=tempB;  
  79.             }  
  80.         }  
  81.         Invalidate();  
  82.     }  


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约