数字图像处理C++ MFCWord文档下载推荐.docx
《数字图像处理C++ MFCWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字图像处理C++ MFCWord文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
![数字图像处理C++ MFCWord文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/29/dbd5c0c8-d6e6-47d2-a40b-830dd4dae8ba/dbd5c0c8-d6e6-47d2-a40b-830dd4dae8ba1.gif)
二.实验目的和意义:
本实验的目的是熟悉并掌握图像处理编程环境,掌握图像平移、镜像、旋转等几何变换的方法,并能通过程序设计实现图像文件的读、写操作,及图像平移、镜像、旋转等几何变换的程序实现。
三.实验主要步骤:
1、在txclView.h中的protected:
下加入核心代码:
CDC*mypDC;
CBitmap*bitmap;
2、添加虚拟函数
通过操作在CtclView中点击鼠标右键,然后再选中AddvirtualFunction
双击后再选中onlnitialUpdate添加建立即可,建立成功后编写代码。
核心代码为:
voidCTxclView:
:
OnInitialUpdate()
{
CView:
OnInitialUpdate();
mypDC=newCDC;
bitmap=newCBitmap;
bitmap->
LoadBitmap(IDB_BITMAP3);
CDC*pDC=GetDC();
mypDC->
CreateCompatibleDC(pDC);
SelectObject(bitmap);
}
3、加入位图
将待处理的照片格式转化成bmp格式,具体转化过程可借助画图工具完成,插入后的结果为:
4、添加各种功能按钮,并建立类向导,添加完成后的界面为:
(1)图片的显示
voidCTxclView:
Ontuxiang()
//TODO:
Addyourcommandhandlercodehere
BITMAPbmp;
GetBitmap(&
bmp);
CDC*pDC=GetDC();
COLORREFclr;
intx=bmp.bmWidth;
inty=bmp.bmHeight;
for(inti=0;
i<
y;
++i)
{
for(intj=0;
j<
x;
++j)
{
clr=mypDC->
GetPixel(j,i);
intr=GetRValue(clr);
intg=GetGValue(clr);
intb=GetBValue(clr);
pDC->
SetPixel(j,i,RGB(r,g,b));
}
}
结果为:
(2)图像的简单灰度处理、逆反处理以、减小灰度处理、霓虹处理、增加灰度处理:
A、灰度处理核心代码:
Onhuidu()
inteva=(r+g+b)/3;
SetPixel(j,i,RGB(eva,eva,eva));
B、逆反处理核心代码:
Onnifan()
intr=255-GetRValue(clr);
intg=255-GetGValue(clr);
intb=255-GetBValue(clr);
SetPixel(j+300,i,RGB(r,g,b));
C、减小灰度处理核心代码:
Onjianxiaohuidu()
BITMAPbmp;
intr=GetRValue(clr)*GetRValue(clr)/255;
intg=GetGValue(clr)*GetRValue(clr)/255;
intb=GetBValue(clr)*GetRValue(clr)/255;
SetPixel(j+600,i,RGB(r,g,b));
D、图形的霓虹处理核心代码:
Onnihong()
intr,g,b;
COLORREFclra;
COLORREFclrb;
COLORREFclrc;
clra=mypDC->
clrb=mypDC->
GetPixel(j,i+1);
clrc=mypDC->
GetPixel(j+1,i);
r=(int)sqrt((GetRValue(clra)-GetRValue(clrb))*(GetRValue(clra)-GetRValue(clrb))+(GetRValue(clra)-GetRValue(clrc))*(GetRValue(clra)-GetRValue(clrc)));
g=(int)sqrt((GetRValue(clra)-GetRValue(clrb))*(GetRValue(clra)-GetRValue(clrb))+(GetRValue(clra)-GetRValue(clrc))*(GetRValue(clra)-GetRValue(clrc)));
b=(int)sqrt((GetRValue(clra)-GetRValue(clrb))*(GetRValue(clra)-GetRValue(clrb))+(GetRValue(clra)-GetRValue(clrc))*(GetRValue(clra)-GetRValue(clrc)));
pDC->
SetPixel(j,i+300,RGB(r,g,b));
}
E、图形增大灰度处理核心代码:
OnZenghuidu()
intr=sqrt((GetRValue(clr)/255))*255;
intg=sqrt((GetRValue(clr)/255))*255;
SetPixel(j+300,i+300,RGB(r,g,b));
图像的简单灰度处理、逆反处理以、减小灰度处理、霓虹处理、增加灰度处理结果对比:
(3)图像的镜像变换
A、垂直镜像变换的核心代码
Onchuizhijx()
GetPixel(x-j,i);
SetPixel(j+300,i,RGB(r,g,b));
B、水平镜像变换的核心代码
Onshuipingjx()
BITMAPbmp;
GetPixel(j,y-i);
}
垂直镜像变换、水平镜像变换与原图对比结果:
(4)图像的锐化处理
A、图像梯度增加方法一锐化处理核心代码:
OnTiDuZengqiangyi()
//intb=GetBValue(clra);
intr=abs(GetRValue(clra)-GetRValue(clrb))+abs(GetRValue(clra)-GetRValue(clrc));
SetPixel(j,i,RGB(r,r,r));
B、图像梯度增加方法二锐化处理核心代码:
OnTiDuZengEr()
COLORREFclrb;
COLORREFclra;
if(r<
=50)
r=GetRValue(clra);
SetPixel(j+300,i,RGB(r,r,r));
C、图像梯度增加方法一锐化处理核心代码:
OnTiduZengSan()
if(r>
50)
r=0;
else
r=GetRValue(clra);
SetPixel(j+600,i,RGB(r,r,r));
D、Sobel算子锐化处理核心代码:
OnSobelSuanZi()
CDC*pDC=GetDC();
COLORREFclra,clrb,clrc;
COLORREFclra1,clrb1,clrc1;
COLORREFclra2,clrb2;
GetPixel(j-1,i+1);
GetPixel(j+1,i+1);
clra1=mypDC->
GetPixel(j-1,i-1);
clrb1=mypDC->
GetPixel(j,i-1);
clrc1=mypDC->
GetPixel(j+1,i-1);
clra2=mypDC->
clrb2=mypDC->
GetPixel(j-1,i);
intm=
abs(GetRValue(clra)+2*GetRValue(clrb)+GetRValue(clrc)-GetRValue(clra1)-2*GetRValue(clrb1)-GetRValue(clrc1));
intn=
abs(GetRValue(clrc1)+2*GetRValue(clra2)+GetRValue(clrc)-GetRValue(clra1)-2*GetRValue(clrb2)-GetRValue(clra));
intr=m+n;
SetPixel(j,i+300,RGB(r,r,r));
四种锐化处理结果为:
(5)旋转变化
采用的是45度角旋转正变换,核心代码为:
OnXuanZHuanZheng()
intm=j*cos(45)+i*sin(45);
intn=-j*sin(45)+i*cos(45);
clr=mypDC->
intr=GetRValue(clr);
intg=GetGValue(clr);
intb=GetBValue(clr);
SetPixel(m,n+300,RGB(r,g,b));
SetPixel(m+1,n+300,RGB(r,g,b));
SetPixel(m,n+1+300,RGB(r,g,b));
旋转结果为:
(6)各种处理后的结果为:
四、实验总结
通过本次实验培养了我独立思考、综合运用所学有关相应知识的能力,强化上机动手编程能力,闯过理论与实践相结合的难关!
在这次编程实现简单的图像处理中,虽然总体不是太难,但还是遇到了一些小问题,也让我学到了很多,让我知道了动手能力有待进一步的提高!
在实验过程中必须将书本上的知识与实践相结合,一定要学以致用,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!
都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!
为以后的工作打下良好的知识基础和技能基础!