void CSDIELSView::OnSharpeningLaplace()
{
//程序编制:李立宗 lilizong@gmail.com
//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 tempX,tempY;
int temp;
//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=
*(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)-8*(*(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);
temp=abs(temp);
if(temp>255)
tempR=255;
else
tempR=temp;
if(bitCount==1)
{
tempG=tempR;
tempB=tempR;
}
else
{
temp=
*(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)-8*(*(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);
temp=abs(temp);
if(temp>255)
tempG=255;
else
tempG=temp;
temp=
*(pRealData+pit*(y-1)+(x-1)*bitCount+2)+*(pRealData+pit*(y-1)+(x)*bitCount+2)+*(pRealData+pit*(y-1)+(x+1)*bitCount+2)
+*(pRealData+pit*(y)+(x-1)*bitCount+2)-8*(*(pRealData+pit*(y)+(x)*bitCount+2))+*(pRealData+pit*(y)+(x+1)*bitCount+2)
+*(pRealData+pit*(y+1)+(x-1)*bitCount+2)+*(pRealData+pit*(y+1)+(x)*bitCount+2)+*(pRealData+pit*(y+1)+(x+1)*bitCount+2);
temp=abs(temp);
if(temp>255)
tempB=255;
else
tempB=temp;
}
*(pRealData2+pit2*y+x*bitCount2)=tempR;
*(pRealData2+pit2*y+x*bitCount2+1)=tempG;
*(pRealData2+pit2*y+x*bitCount2+2)=tempB;
}
}
Invalidate();
}
分享到:
相关推荐
Visual c++数字图像处理拉普拉斯锐化(边缘检测)算法源码
这里包括几种比较好的图像处理的VC源代码,包括:维纳滤波,Hough变换,阈值变换,高斯平滑与拉普拉斯锐化.
VC++中使用拉普拉斯边缘检测法对BMP位图进行锐化的实例包。VC++处理图像的时候会用到,锐化功能会使一幅图片的轮廓更清淅,看上去图片也就更清淅
VC++图像处理源代码:拉普拉斯锐化(边缘检测),已经过作者调试,保证可以正常运行。
数字图像处理,对彩色图像的拉普拉斯算子锐化以及梯度算子锐化的比较,VC/MFC实现。
直方图 线性变换 窗口变换 图像反色 阈值变换 灰度拉伸 平滑滤波 中值滤波 梯度锐化 拉普拉斯锐化 边缘检测
VC6 MFC图像处理 直方图 均衡 平滑 拉普拉斯
源码目录结构图、256色转灰度图、Hough变换、Walsh变换、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像缩放、图像镜像、均值滤波、对比度拉伸、拉普拉斯锐化(边缘...
关于数字图像处理的一些基本代码,BMPViewer,hough变化,Sobel算子边缘检测算法,差影法.高斯平滑处理,灰度均衡,灰度拉伸,灰度阈值变换,拉普拉斯锐化,亮度增减
拉普拉斯锐化(边缘检测).rar 方块编码.rar 梯度锐化.rar 灰度均衡.rar 用Canny算子提取边缘.rar 直方图均衡.rar 离散余弦变换.rar 维纳滤波处理.rar 逆滤波处理.rar 阈值变换.rar 高斯平滑.rar
内容索引:VC/C++源码,图形处理,拉普拉斯,边缘检测,图像锐化 VC++中使用拉普拉斯边缘检测法对BMP位图进行锐化的实例包。VC++处理图像的时候会用到,锐化功能会使一幅图片的轮廓更清淅,看上去图片也就更清淅,但有...
图像的增强处理:运用到opencv知识,包括图像平滑,中值滤波,拉普拉斯锐化
数字图像处理算法实现的源程序,编译环境VC6.0.包括图像点运算,几何变换,滤波,傅立叶变换等
包括Wash变换,将256色图像转为灰度图,高斯平滑,对比度拉伸,二值化,反色,方块编码,Fourier变换,均值滤波,拉普拉斯锐化,DCT变换,亮度增减,梯度锐化,图像镜像,图像平移,图像缩放,图像细化,图像旋转,...
使用VC++ 6.0完成的一个具有MFC界面的简单数字图像处理程序。...图像增强:图像平滑、梯度锐化、拉普拉斯锐化。形态学变换:腐蚀、膨胀、开运算、闭运算。边缘与轮廓:边缘检测、轮廓提取、轮廓跟踪。
Visual c 数字图像处理典型算法及实例随书光盘源码,列举一些源码:用Canny算子提取边缘、梯度锐化、取对数、256色转灰度图、Hough变换、对比度拉伸、Walsh变换、二值化变换、维纳滤波处理、阈值变换、直方图均衡、...
论述了数字图像增强技术中涉及到的图像平滑、中值滤波、梯度锐化和拉普拉斯锐化等基本算法及其在 Visual C + + 6. 0 下的具体实现,同时,还分别给出一幅标准的数字图像在各种处理前与处理后的对照图像。
30个图像处理的VC++ 源代码,包括256色转灰度图,Hough变换,image_j1,PCA,Walsh变换,对比度拉伸,二值化变换,反色, 方块编码,傅立叶变换,高斯平滑,灰度均衡,均值滤波,拉普拉斯锐化(边缘检测), 离散余弦变换,亮度增减...
注意,本目录中大部分程序只能对256色图像进行操作。 对比度拉伸 二值化 变换反色 亮度增减 取对数取指数 直方图均衡 阈值变换 图像镜像 图像平移 ...拉普拉斯锐化(边缘检测) 离散余弦变换 Walsh变换 维纳滤波处理
图像的拉普拉斯锐化的VC源代码,可用于对图像进行边缘检测,希望对图形图像学习者有所帮助。