基于vc数字图像处理系统课程报告毕业设计

上传人:l**** 文档编号:71047370 上传时间:2022-04-06 格式:DOC 页数:26 大小:5.48MB
收藏 版权申诉 举报 下载
基于vc数字图像处理系统课程报告毕业设计_第1页
第1页 / 共26页
基于vc数字图像处理系统课程报告毕业设计_第2页
第2页 / 共26页
基于vc数字图像处理系统课程报告毕业设计_第3页
第3页 / 共26页
资源描述:

《基于vc数字图像处理系统课程报告毕业设计》由会员分享,可在线阅读,更多相关《基于vc数字图像处理系统课程报告毕业设计(26页珍藏版)》请在装配图网上搜索。

1、 毕业设计论文基于vc数字图像处理系统摘要:数字图像处理是从 20 世纪 60 年代以来随着计算机技术和 VLSI 的发展而产生、发展和不断成熟起一个新兴技术领域,它在理论上和实际应用上都取得了巨大的成就,并引起各方面人士的广泛重视。本实验研究基于VC平台的数字图像处理基本操作的方法,并在VC平台下实现。该软件可对数字图像实现基本的处理操作,包括对图像的点运算、几何变换以与部分正交变换的操作。该软件功能包括对图像的打开、图像处理的基本操作以与保存新生成的图像。关键字:数字图像处理、vc+6.0平台、vc+6.0编程工具一 引言 数字图像处理采用一定的算法对数字图像进行处理,以获得人眼视觉或 者

2、某种接受系统所需要的图像处理过程。图像处理的基础是数字,主要任务是进行各种算法设计和算法实现。通过界面实现显示原数字图像以与操作后的效果图。通过界面实现不同操作方法的选择、参数设置等,能通过编程实现对处理后的图像进行保存、生成新的图像文件,能实现不少于6种基本操作。其目的是进一步理解数字图像的原理、基本操作;掌握对数字图像处理操作的实现过程;学习使用Visual C+进行软件编程;熟悉数字图像文件的基本格式。二 设计流程与结果显示(1) 设计平台Visual C+6.0(2) 设计思想、框图与显示界面思想:首先建立OPEN()函数,然后调用子程序OpenBMP(CString fileName

3、)打开bmp位图,调用子程序DrawPic(unsigned char* pDa, int dx,int dy)显示图片。接着实现图像放大、图像缩小、反色、阈值变换、镜像变换、显示系统时间等功能。框图:调用子程序OpenBMP()打开图片调用子程序DrawPic()显示图片实现的功能图像放大图像缩小阈值变换反 色镜像变换时间显示对话框背景图平 移建立函数OPEN()开 始显示界面:(3)各模块功能与流程图a. 图像显示原理:调用OpenBMP()子程序打开图片,调用DrawPic()子程序显示图片。流程图:显示结果:b. 图像放大原理: 最邻近点插值算法是最简单也是速度最快的一种算法,其做法是

4、將放大后未知的像素点P,將其位置换算到原始影像上,与原始的邻近的4周像素点A,B,C,D做比较,令P点的像素值等于最靠近的邻近点像素值即可。这种方法会带来明显的失真。在A,B中点处的像素值会突然出现一个跳跃,这就是出现马赛克和锯齿等明显走样的原因。最临近插值法唯一的优点就是速度快。流程图:开始i=0,j=0in_heightj=0 & x1-m=0 & y1-nheight) /坐标(x1-m, y1-n) 在原图像围f(x1,y1) = f(x1-m, y1-n);else f(x1, y1) = 255;显示结果(x平移50,y平移100):e.图像对称:原理:即以中心为原点构成坐标系,对

5、图像进行x轴对称变换、y轴对称变换。比如,x轴对称变换:f(x1,y1) = f(width-x1, y1);y轴对称变换:f(x1,y1) = f(x1, height-y1)。显示结果:X对称:Y对称:原点对称:f图像阈值变换:原理:即选择一个阈值,对图像进行二值化。比如,设定阈值thr=100,则像素值小于100的像素值变为0,其他的像素值变为255。显示结果(阈值为45):g.图像反色:原理:即将图像灰度值作如下变换:y1 = 255 - y0,y0为像素原始值,y1为像素反色后的值。显示结果:h.时间显示原理:显示结果:i.灰度均衡化原理:流程图:显示结果:三 软件调试分析(1)显示

6、图像前,需把以下代码添加到.h的文件中longg_height;long g_width; bool IsFirstDraw;tagRGBQUAD m_orgRGBQUAD256;unsigned char*OpenBMP(CString FileName);void DrawPic(unsigned char* pDa, int dx,int dy);CString m_szFileName;CString m_szFilePathName;以下代码添加到.cpp头文件中unsigned char* m_pImg;int g_SvWth; long g_height;long g_width

7、;(2)定义编辑框的变量时,变量的类型要对应程序变量的类型。四 结语五 参考文献精通Visual.C+数字图像处理典型算法与实现(第2版)宏林.pdf数字图像处理实验指导六 源代码void CTDlg:OnOpen() / TODO: Add your control notification handler code hereUpdateData(true);CFileDialog dlg(true,NULL,NULL,OFN_OVERWRITEPROMPT,bmp(*.bmp)|*.bmp|,NULL);if(dlg.DoModal()=IDOK)m_szFileName = dlg.Ge

8、tFileName(); m_szFilePathName = dlg.GetPathName();else return;m_pImg =OpenBMP(m_szFilePathName);m_Width = n_width;m_Height = n_height; IsFirstDraw=FALSE;Invalidate(FALSE);/TRUE g_pDst =(unsigned char *) new char(n_width+(4-n_width%4)%4)*n_height;memcpy(g_pDst, m_pImg, (n_width+(4-n_width%4)%4)*n_hei

9、ght);DrawPic(m_pImg,0,0);UpdateData(false);unsigned char* CTDlg:OpenBMP(CString fileName)unsigned char * pData;int i=0,bitCount=0;CFile file;if(fileName=)return NULL;BITMAPINFOHEADER bmpInfoHead;BITMAPFILEHEADER bmpFileHead;if(file.Open(fileName,CFile:modeRead|CFile:shareDenyNone)=NULL)AfxMessageBox

10、(Can not open the file);return NULL; file.Read(&bmpFileHead,sizeof(BITMAPFILEHEADER);/读文件头信息,返回值为实际读取的字节数/*&bmpFileHead是接收数据缓冲区的指针;第二个参数(sizeof(BITMAPFILEHEADER)指读出数据的字节数,起始地址为当前文件指针的地址*/file.Read(&bmpInfoHead,sizeof(BITMAPINFOHEADER);n_width = bmpInfoHead.biWidth; n_height = bmpInfoHead.biHeight;n_

11、SvWth =n_width+(4-n_width%4)%4;bitCount=bmpInfoHead.biBitCount;switch(bitCount)case 1:file.Read(m_orgRGBQUAD,2*sizeof(RGBQUAD);break;case 4:file.Read(m_orgRGBQUAD,8*sizeof(RGBQUAD);break;case 8:file.Read(m_orgRGBQUAD,256*sizeof(RGBQUAD);break;default : break;long lFileSize = bmpFileHead.bfSize - bmp

12、FileHead.bfOffBits;pData = (unsigned char*)new charlFileSize;if(!pData)return NULL; file.ReadHuge(pData,lFileSize);/与file.Read(&bmpFileHead,sizeof(BITMAPFILEHEADER)函数一样,只是读取的数据块可以大于64Kfile.Close();return pData;/图像显示void CTDlg:DrawPic(unsigned char* pDa, int dx,int dy)/根据传递的图像头指针和长宽显示图像int i,j,n;unsi

13、gned char m;CPoint P; CClientDC clientDc(this);n=n_width+(4-n_width%4)%4;for(i=0;in_height;i+)for(j=0;jn_width;j+)m=pDan*(n_height-i-1)+j;clientDc.SetPixel(j+dx+10,i+dy+10,RGB(m,m,m);/图像放大void CTDlg:OnFd() / TODO: Add your control notification handler code here int i,j,x0,y0,n,m;double dx,dy;unsigne

14、d char da1,da2,da3,da4; UpdateData(true);n=n_width+(4-n_width%4)%4;for(i=0;in_height;i+)for(j=0;jn;j+)x0 = (int)(j/m_nFD);dx = j/m_nFD - x0;y0 = (int)(i/m_nFD);dy = i/m_nFD - y0;m=n_height-y0-1;da1 = m_pImgn*m+x0;da2 = m_pImgn*m+x0+1;da3 = m_pImgn*(m-1)+x0;da4 = m_pImgn*(m-1)+x0+1;g_pDstn*(n_height-

15、i-1)+j = (int)(da1*(1-dx) + da2*dx)*(1-dy) + (da3*(1-dx) + da4*dx)*dy+0.5); /四舍五入DrawPic(g_pDst,n+10,0);UpdateData(false);/图像缩小void CTDlg:OnSx() / TODO: Add your control notification handler code hereint i,j,dx,dy,n,m;UpdateData(true);n=n_width+(4-n_width%4)%4;for(i=0;in_height;i+)for(j=0;jn;j+)dx =

16、 (int)(j*m_nSX);dy = (int)(i*m_nSX);m=n_height-i-1;if( dx=n | dy=n_height ) g_pDstn*m+j = 255;else g_pDstn*m+j = m_pImgn*(m+i-dy)+dx;DrawPic(g_pDst,n+10,0);UpdateData(false);/图像平移void CTDlg:OnPy() / TODO: Add your control notification handler code hereint i,j,dx,dy,n,m;UpdateData(true);n=n_width+(4-

17、n_width%4)%4;for(i=0;in_height;i+)for(j=0;jn;j+)dx = j - m_nXPY;dy = i - m_nYPY;m=n_height-i-1;if( dx=n | dy=n_height )g_pDstn*m+j = 255;elseg_pDstn*m+j = m_pImgn*(m+i-dy)+dx;DrawPic(g_pDst,n+10,0);UpdateData(false);/图像x轴对称void CTDlg:OnXdc() / TODO: Add your control notification handler code hereint

18、 i,j,n,m;UpdateData(true);n=n_width+(4-n_width%4)%4;for(i=0;in_height;i+)for(j=0;jn;j+) m=n_height-i-1;g_pDstn*m+j = m_pImgn*(m+1)-j;DrawPic(g_pDst,n+10,0);UpdateData(false);/图像y轴对称void CTDlg:OnYdc() / TODO: Add your control notification handler code hereint i,j,n,m;UpdateData(true);n=n_width+(4-n_w

19、idth%4)%4;for(i=0;in_height;i+)for(j=0;jn;j+)m=n_height-i-1;g_pDstn*m+j = m_pImgn*i+j;DrawPic(g_pDst,n+10,0);UpdateData(false);/图像原点对称void CTDlg:OnYddc() / TODO: Add your control notification handler code hereint i,j,n,m;UpdateData(true);n=n_width+(4-n_width%4)%4;for(i=0;in_height;i+)for(j=0;jn;j+)m

20、=n_height-i-1;g_pDstn*m+j = m_pImgn*(i+1)-j;DrawPic(g_pDst,n+10,0);UpdateData(false);/图像阈值变换void CTDlg:OnYz() / TODO: Add your control notification handler code hereint i,j,n,m;UpdateData(true);n=n_width+(4-n_width%4)%4;for(i=0;in_height;i+)m=n_height-i-1;for(j=0;j=m_nYZ)g_pDstn*m+j = 255;elseg_pDst

21、n*m+j = 0;DrawPic(g_pDst,n+10,0);UpdateData(false);/图像反色void CTDlg:OnFs() / TODO: Add your control notification handler code hereint i,j,n,m; UpdateData(true);n=n_width+(4-n_width%4)%4;for(i=0;in_height;i+)for(j=0;jn;j+)m=n_height-i-1;g_pDstn*m+j = 255-m_pImgn*m+j;DrawPic(g_pDst,n+10,0);UpdateData(f

22、alse);void CTDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call default UpdateData(true); CString strTime; CTime tm; tm=CTime:GetCurrentTime(); strTime=tm.Format(%Y-%m-%d %H:%M:%S); SetDlgItemText(IDC_TIME,strTime); /显示系统时间 UpdateData(false);CDialog:OnTimer(nIDEvent);显

23、示背景图片的操作步骤一:先用windows自带的绘图工具将自已选择的图片打开并另存为bmp格式图片存放于桌面步骤二:点击菜单栏上的“插入”“资源”“引入”,在弹出的对话框中选择之前保存的bmp图片,在bmp文件夹下,图片的ID自动设置成IDB_BITMAP1.步骤三:点“fileview”“Source Files”双击“xxDlg.cpp”进入到代码界面。步骤四:在CXXXDialog:OnPaint()中的else 后面添加如下代码 CPaintDC dc(this); CRect rc; GetClientRect(&rc); CDC dcMem; dcMem.CreateCompati

24、bleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1); / IDB_BITMAP1为对应图的ID BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); CBitmap* pbmpPri = dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rc.Width(), rc.Height(), &dcMem,0,0,bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);/图像灰度

25、均衡化void CTDlg:OnBUThuidujh() /灰度均衡化 / TODO: Add your control notification handler code here int i,j,count,n=0,m,c,g=0;int grayNum256;int grayMap256; count=g_width+(4-g_width%4)%4;for (i=0; ig_height; i+) /读取原文件直方图for (j=0; jcount; j+) g=m_pImgDatacount*(g_height-i-1)+j; /计算像素点的灰度级grayNumg+; /计算各个灰度级个数for (n=0; n256; n+) /重新定义灰度级c=0;for (m=0; m=n; m+)c+=grayNumm;grayMapn=(BYTE)(c*255/g_height/count);for (i=0; ig_height; i+) /生成新直方图for (j=0; jcount; j+) g=m_pImgDatacount*(g_height-i-1)+j; /计算像素点原灰度级g_pDstcount*(g_height-i-1)+j=grayMapg; /给像素点赋上新灰度级 DrawPic(g_pDst,count+10,0);26 / 26

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!