void CSDIELSView::OnSharpeningGradient()
{
//程序编制:李立宗
//2012-8-11
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 t=100; //门限
// tempR=tempG=tempG=0;
//说明:将生产的图像作为24位图处理。
for (int y=1; y<maxY-1; y++) {
for (int x=1; x<maxX-1; x++) {
temp=(int)sqrt((float)(
(*(pRealData+pit*(y)+(x)*bitCount)-*(pRealData+pit*(y)+(x-1)*bitCount))*
(*(pRealData+pit*(y)+(x)*bitCount)-*(pRealData+pit*(y)+(x-1)*bitCount))+
(*(pRealData+pit*(y)+(x)*bitCount)-*(pRealData+pit*(y-1)+(x)*bitCount))*
(*(pRealData+pit*(y)+(x)*bitCount)-*(pRealData+pit*(y-1)+(x)*bitCount))));
if(temp>=t)
{
if(temp+100>255)
tempR=255;
else
tempR=temp+100;
}
else
tempR=*(pRealData+pit*(y)+(x)*bitCount);
if(bitCount==1)
{
tempG=tempR;
tempB=tempR;
}
else
{
temp=(int)sqrt((float)(
(*(pRealData+pit*(y)+(x)*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)+(x)*bitCount+1)-*(pRealData+pit*(y-1)+(x)*bitCount+1))*
(*(pRealData+pit*(y)+(x)*bitCount+1)-*(pRealData+pit*(y-1)+(x)*bitCount+1))));
if(temp>=t)
{
if(temp+100>255)
tempG=255;
else
tempG=temp+100;
}
else
tempG=*(pRealData+pit*(y)+(x)*bitCount+1);
temp=(int)sqrt((float)(
(*(pRealData+pit*(y)+(x)*bitCount+2)-*(pRealData+pit*(y)+(x-1)*bitCount+2))*
(*(pRealData+pit*(y)+(x)*bitCount+2)-*(pRealData+pit*(y)+(x-1)*bitCount+2))+
(*(pRealData+pit*(y)+(x)*bitCount+2)-*(pRealData+pit*(y-1)+(x)*bitCount+2))*
(*(pRealData+pit*(y)+(x)*bitCount+2)-*(pRealData+pit*(y-1)+(x)*bitCount+2))));
if(temp>=t)
{
if(temp+100>255)
tempB=255;
else
tempB=temp+100;
}
else
tempB=*(pRealData+pit*(y)+(x)*bitCount+2);
}
*(pRealData2+pit2*y+x*bitCount2)=tempR;
*(pRealData2+pit2*y+x*bitCount2+1)=tempG;
*(pRealData2+pit2*y+x*bitCount2+2)=tempB;
}
}
Invalidate();
}

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
python梯度提升决策树
本文简要介绍了Python梯度提升决策树的方法示例,包括鸢尾花(Iris)数据集进行分类、房价预测(回归)、垃圾邮件分类、特征选择等示例。
决策树 垃圾邮件 GBDT 房价预测 Python -
图像锐化拉普拉斯vc代码
void CSDIELSView::OnSharpening
byte 位图 mpx -
Halcon之图像梯度、图像边缘、USM锐化
图像梯度、图像边缘图像梯度、图像边缘图像梯度、图像边缘
#include ios 2d 图像梯度 拉普拉斯算子