




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、毕业设计论文基于vc的数字图像处理系统摘要:数字图像处理是1960年代以来随着计算机技术和VLSI的发展而出现、发展和成熟的新兴技术领域。人们的关注。本实验研究了基于VC平台的数字图像处理的基本操作方法,并在VC平台下实现。该软件可以实现对数字图像的基本处理操作,包括对图像的点操作、几何变换和对零件的正交变换操作。软件功能包括图像的打开、图像处理的基本操作以及新生成的图像的保存。关键词:数字图像处理、vc+6.0平台、vc+6.0编程工具介绍数字图像处理是利用一定的算法对数字图像进行处理,以获得人类视觉或某种接收系统所需的图像处理过程。图像处理的基础是数字,主要任务是设计和实现各种算法。操作后
2、通过界面显示原始数字图像以匹配效果图。通过界面可实现不同操作方式的选择、参数设置等,并可通过编程保存处理后的图像并生成新的图像文件,可实现不少于6种基本操作。目的是进一步了解数字图像的原理和基本操作;掌握数字图像处理操作的实现过程;学习使用Visual C+进行软件编程;熟悉数字图像文件的基本格式。设计过程及结果展示设计平台视觉 C+6.0设计理念、框图和显示界面思路:先建立OPEN()函数,然后调用子程序OpenBMP(CString fileName)打开bmp位图,调用子程序DrawPic(unsigned char* pDa, int dx, int dy)显示图片。进而实现图像放大、
3、图像缩小、反转、阈值变换、镜像变换、显示系统时间等功能。框图:调用子程序OpenBMP()调用子程序OpenBMP()打开图片调用子程序DrawPic()显示图片实现的功能图像放大图像缩小阈值变换反 色镜像变换时间显示对话框背景图平 移建立函数OPEN()开 始用户界面:(3) 各模块功能及流程图图像显示原则:调用OpenBMP()子程序打开图片,调用DrawPic()子程序显示图片。流程图:显示结果:图像放大原则:最近邻插值算法是最简单、最快的算法。其方法是将放大后的未知像素点P转换为原始图像,将原始相邻4周像素点A、B.、C、D进行比较,点P的像素值可以等于最近邻点的像素值。这种方法引入了
4、显着的失真。在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);否则 f(x1, y1) = 255;显示结果(x 平移 50,y 平移 100):e.图像对称性:原理:以中心为原点形成坐标系,对图像进行x轴对称变换和y轴对称变换。例如x轴对称变换:f(x1,y1) = f(width-x1, y1); y轴对称变换:f(x1,y1) = f(x1, h
5、eight-y1)。显示结果:X对称性:Y对称性:原点对称:F。图像阈值变换:原则:即选择一个阈值并对图像进行二值化。例如,如果设置阈值 thr=100,则小于 100 的像素值的像素值变为 0,而其他像素值变为 255。显示结果(阈值为 45):G。图像反转:原则:即图像的灰度值变换为:y1 = 255 - y0,y0为像素的原始值,y1为像素反转后的值。显示结果:H。时间显示原则:显示结果:一世。灰度均衡原则:流程图:显示结果:软件调试分析(1)在显示图片之前,需要在.h文件中添加如下代码longg_height;长 g_width;布尔 IsFirstDraw;标签RGBQUAD m_o
6、rgRGBQUAD256;unsigned char*OpenBMP(CString FileName);无效DrawPic(无符号字符* pDa,int dx,int dy);CString m_szFileName;CString m_szFilePathName;将以下代码添加到 .cpp 头文件中无符号字符* m_pImg;诠释 g_SvWth;长g_height;长 g_width;(2) 定义编辑框的变量时,变量的类型要与程序变量的类型相对应。结语参考精通Visual.C+数字图像处理典型算法与实现(第二版)Honglin.pdf数字图像处理实验指南源代码无效 CTDlg:OnOp
7、en()/ TODO: 在此处添加您的控件通知处理程序代码更新数据(真);CFileDialog dlg(true,NULL,NULL,OFN_OVERWRITEPROMPT,bmp(*.bmp)|*.bmp|,NULL);如果(dlg.DoModal()=IDOK)m_szFileName = dlg.GetFileName();m_szFilePathName = dlg.GetPathName();别的返回;m_pImg =OpenBMP(m_szFilePathName);m_Width = n_width;m_Height = n_height; IsFirstDraw=假;无效(F
8、ALSE);/真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_height);DrawPic(m_pImg,0,0);更新数据(假);无符号字符* CTDlg:OpenBMP(CString 文件名)无符号字符 * pData;int i=0,bitCount=0;CFile 文件;如果(文件名=)返回空值;BITMAPINFOHEADER bmpInfoHead;位图文件头 bmp文件头;if(fil
9、e.Open(fileName,CFile:modeRead|CFile:shareDenyNone)=NULL)AfxMessageBox(无法打开文件);返回空值;file.Read(&bmpFileHead, sizeof(BITMAPFILEHEADER);/读取文件头信息,返回值为实际读取的字节数/*&bmpFileHead为接收数据缓冲区的指针;第二个参数(sizeof(BITMAPFILEHEADER)指的是读取数据的字节数,起始地址为当前文件指针的地址*/file.Read(&bmpInfoHead, sizeof(BITMAPINFO头);n_width = bmpInfoH
10、ead.biWidth; n_height = bmpInfoHead.biHeight;n_SvWth =n_width+(4-n_width%4)%4;bitCount=bmpInfoHead.biBitCount;开关(位计数)案例1:file.Read(m_orgRGBQUAD,2*sizeof(RGBQUAD);break;案例4:file.Read(m_orgRGBQUAD,8*sizeof(RGBQUAD);break;案例 8:file.Read(m_orgRGBQUAD,256*sizeof(RGBQUAD);break;默认:中断;长 lFileSize = bmpFile
11、Head.bfSize - bmpFileHead.bfOffBits;pData = (unsigned char*)new charl文件大小;如果(!pData)返回空值; file.ReadHuge(pData,lFileSize);/和file.Read(&bmpFileHead,sizeof(BITMAPFILEHEADER)函数一样,只是读取的数据块可以大于64K文件。关闭();返回数据;/图像显示void CTDlg:DrawPic(unsigned char* pDa, int dx, int dy) /根据传入的图像头指针和长宽显示图像整数 i,j,n;无符号字符 m;C点
12、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);/图像缩放无效 CTDlg:OnFd()/ TODO: 在此处添加您的控件通知处理程序代码整数 i,j,x0,y0,n,m;双 dx,dy;无符号字符 da1,da2,da3,da4;更新数据(真);n=n_width+(4-n_width%4)%4;for(i=0;in_
13、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-i-1)+j = (int)(da1*(1-dx) + da2*dx)*(1-dy) + (da3*(1-dx) + da4*dx)*dy+0.5); /四
14、舍五入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;更新数据(真);n=n_width+(4-n_width%4)%4;for(i=0;in_height;i+)for(j=0;jn;j+)dx = (int)(j*m_nSX);dy = (int)(i*m_nSX);m=n_height-i-1;if( dx=n | dy=n_height ) g_pDstn*m+j
15、 = 255;否则 g_pDstn*m+j = m_pImgn*(m+i-dy)+dx;DrawPic(g_pDst,n+10,0);更新数据(假);/图像差分无效 CTDlg:OnPy()/ TODO: 在此处添加您的控件通知处理程序代码整数 i,j,dx,dy,n,m;更新数据(真);n=n_width+(4-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;否则g_
16、pDstn*m+j = m_pImgn*(m+i-dy)+dx;DrawPic(g_pDst,n+10,0);更新数据(假);/图像x轴对称无效 CTDlg:OnXdc()/ TODO: 在此处添加您的控件通知处理程序代码整数 i,j,n,m;更新数据(真);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);更新数据(假);/图像y轴对称无效 CTDlg:OnYdc()/ TODO: 在此
17、处添加您的控件通知处理程序代码整数 i,j,n,m;更新数据(真);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*i+j;DrawPic(g_pDst,n+10,0);更新数据(假);/原图像点无效 CTDlg:OnYddc()/ TODO: 在此处添加您的控件通知处理程序代码整数 i,j,n,m;更新数据(真);n=n_width+(4-n_width%4)%4;for(i=0;in_height;i+)for(j=0;jn;j+)m=n_he
18、ight-i-1;g_pDstn*m+j = m_pImgn*(i+1)-j;DrawPic(g_pDst,n+10,0);更新数据(假); /特殊雪花无效 CTDlg:OnYz()/ ALL: 在此处添加您的控制通知处理程序代码整数 i,j,n,m;更新数据(真);n=n_width+(4-n_width%4)%4;对于 ( i = 0 ; i n_height ; i + )m=n_height-i-1;对于 ( j = 0 ; j =m_nYZ) g_pDstn*m+j = 255;否则g_pDstn*m+j = 0; DrawPic ( g_pDst , n + 10 . 0 );更新
19、数据(假); /具体法术无效 CTDlg:OnFs()/ TODO: 在此处添加您的控件通知处理程序代码整数 i,j,n,m;更新数据(真);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);更新数据(假);无效 CTDlg:OnTimer(UINT nIDEvent)/ TODO: 在此处添加您的消息处理程序代码和/或调用默认值更新数据(真);CString 字符串时间;C时间 tm;t
20、m=CTime:GetCurrentTime();strTime=tm.Format(%Y-%m-%d %H:%M:%S);SetDlgItemText(IDC_TIME,strTime); /显示系统时间更新数据(假);CDialog:OnTimer(nIDEvent);显示背景图像的操作第一步:首先,使用Windows自带的绘图工具打开你选择的图片保存为bmp格式的图片保存在桌面上第2步:点击菜单栏上的“插入”-“资源”-“导入”,在弹出的对话框中选择之前保存的bmp图片。在 bmp 文件夹下,图像的 ID 自动设置为 IDB_BITMAP1。第 3 步:点击“文件查看”“源文件”双击“xxDlg.cpp”进入代码界面。第4步:在 CXXXDialog:OnPaint() 的 else 之后添加以下代码CPaintDC dc(这个);CRect rc;GetClientRect(&rc);疾病预防控制中心 dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP1); / IDB_BITMAP1是对应图片的ID位图位图;bmpBackground.GetBitmap(&bit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗设备付款合同范例
- 与演员合同范本
- 别墅电梯采购合同范本
- 乙方出资建房合同范本
- 出售工地用车合同范本
- 劳务派遣施工合同范本
- 医疗营销合同范本
- 北京园林公司合同范本
- 代理推广合作合同范本
- 医院棉被订购合同范例
- 物业防恐防暴演练课件
- 古诗词诵读《李凭箜篌引》 公开课一等奖创新教案统编版高中语文选择性必修中册
- DB12-T 3034-2023 建筑消防设施检测服务规范
- 销售人员岗位职责培训
- 小学生日常行为规范实施方案
- 2024-2025学年九年级化学人教版上册检测试卷(1-4单元)
- 2024年辽宁省鞍山岫岩满族自治县事业单位招聘(150人)历年高频难、易错点500题模拟试题附带答案详解
- DBJ46-070-2024 海南省民用建筑外门窗工程技术标准
- 金属冶炼安全生产实务注册安全工程师考试(初级)试题与参考答案
- 2024年高职高考语文必背古诗
- 护理质控护士竞聘
评论
0/150
提交评论