学士学位论文mfc图像变换系统的设计与实现.docx
- 文档编号:13931679
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:35
- 大小:269.31KB
学士学位论文mfc图像变换系统的设计与实现.docx
《学士学位论文mfc图像变换系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《学士学位论文mfc图像变换系统的设计与实现.docx(35页珍藏版)》请在冰点文库上搜索。
学士学位论文mfc图像变换系统的设计与实现
南阳理工学院
本科生毕业设计(论文)
学院(系):
软件学院
专业:
软件工程
学生:
指导教师:
完成日期201年月
南阳理工学院本科生毕业设计(论文)
MFC图像变换系统的设计与实现
DesignandImplementationofTheImageTransformSoftwareonMFCSystem
总计:
毕业设计(论文)40页
插图:
30幅
南阳理工学院本科毕业设计(论文)
MFC图像变换软件的设计与实现
DesignandImplementationofTheImageTransformSoftwareonMFCSystem
学院(系):
软件学院
专业:
学生姓名:
学号:
指导教师(职称):
评阅教师:
完成日期:
南阳理工学院
NanyangInstituteofTechnology
MFC图像变换软件的设计与实现
软件工程
1[摘要]随着科学技术的不断发展,计算机的更新速度不断提高,人们的思想文化素质的提高,对图像的要求也越来越高。
本软件实现图像的图像底片化、图片灰度化、水平翻转、垂直翻转、负像等。
图像的变换是很常见的处理方式,通过对图像的显示方式或者图像数据进行处理来实现不同的图像特效。
本系统主要是面向BMP格式的24位图像,本程序利用MFC编程技术,首先建立一个基于单文档的应用程序,添加子菜单按钮,分别实现各个特效功能。
程序运行后,首先打开一个24位的BMP格式图像,选择实现不同的功能按钮。
[关键词]BMP图像MFCVisualC++水平翻转垂直翻转灰度化放大缩小底片化
DesignandImplementationofTheImageTransformSoftwareonMFCSystem
ThemajorofsoftwareengineeringLiYuanyuan
Abstract:
Withthedevelopmentofscienceandtechnology,updatespeedcomputercontinuestoimprove,people'sideologicalandculturalqualities,theimageareincreasinglyhighrequirements.Thesoftwareimplementationoftheimage,thepicturenegativesofgray,fliphorizontalflipvertical,negative,etc.
Imagetransformapproachisverycommon,throughorimagedataprocessingtoachieveimageeffectstodifferentdisplayoftheimage.Thesystemismainlyto24bitimagebasedonBMPformat,theprogramusestheMFCprogrammingtechnology,firstbuildanapplicationbasedonasingledocument,KaKothemenubutton,implementationofeachspecificfunction.Aftertheprogramisrunning,firstopenaBMPformatimage24,choiceofdifferentfunctionalbuttons.
Keywords:
BMPImageMFCVisualC++FlipHorizontalFlipverticalGrayAmplificationNegative
1绪论
1.1研究的背景
图像时现代信息社会中最基本的信息。
数字图像处理的研究对象是图像处理技术,这是计算机技术的重要分支和发展方向。
数字图像处理时信息科学、工程学、医学、生理学、甚至社会科学等许多学科的重要基础,同时也是一种具有巨大的经济和社会效益的使用技术,广泛应用于军事、气象、交通、探矿、水利、农业甚至娱乐等领域。
随着信息高速公路和数字地球等概念的提出和发展,数字图像处理技术已得到更加充分的发展,并在现代信息社会中占据了非常重要的低位。
随着图像处理技术的广泛应用,学习和掌握这门科学显得格外重要,图像处理已经成为信息技术相关领域的核心课程。
1.2国内外现状
随着科学技术的不断发展,计算机的更新速度不断提高,人们的思想文化素质的提高,对图像的要求也越来越高。
因此把原始图像与计算机结合起来,从而创作出许多更加完美的图像,满足人们的需求。
计算机图像处理,是指利用计算机对图像进行一系列加工,以便获得人所们需要的效果。
图像是人类获取和交换信息的主要来源,人类感知外界信息,80%以上是通过视觉得到的。
因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。
图像处理或图像分析方法的应用越来越广泛,其主要理论基础是形态数学,立体学,集合论等。
图像处理虽然也可以用光学方法或模拟技术来实现,但目前主要是利用计算机来实现,称为数字图像处理。
因此,图像处理一般是指数字图像处理。
常见的图像处理有图像数字化、图像编码、图像增强、图像复原、图像分割与图像分析等。
经过处理后的图像,一定能够更好的被用于工业或者个人目的。
为此开发这个数字图像处理软件,能够处理一些图像,并对图像处理技术此方面进行深入的研究。
1.3研究的意义
图像处理学是一门综合性边缘学科。
从研究范围来看,它与计算机图形学、模式识别、计算机视觉等既有联系又有区别。
图形学原本指用图形、图表、绘图等形式表达数据信息的科学。
而计算机图形学研究的是如何利用计算机技术来产生这些形式。
和图像分析对比,两者的处理对象和输出结果正好相反。
计算机图形学试图从非图像形式的数据描述来生成图像。
另一方面,模式识别与图像分析则比较相似,只是前者试图把图像抽象成符号描述的类别,它们有相同的输入,而不同的输出结果之间可较方便的进行转换。
至于计算机视觉主要强调用计算机去实现人的视觉功能,其中涉及图像处理的许多技术,但目前的研究内容主要与图像理解相结合。
由此看来,以上学科相互联系,相互交叉,它们之间并没有绝对的界限。
虽各有侧重但又相互补充。
另外以上各学科都得到了人工智能、神经网络、遗传算法、模糊逻辑等新理论、新工具、新技术的支持,所以它们又都在近年得到了长足发展。
在计算机出现之前,模拟图像处理占主导地位。
随着计算机的发展,数字图像处理发展速度越来越快。
与人类对视觉机能着迷的历史相比,它是一门相对年轻的学科。
尽管目前一般采用顺序处理的计算机,对大数据量的图像处理速度不如光学方法快,但是其处理的精度高,实现多种功能的、高度复杂的运算求解非常灵活方便。
在其短短的历史中,它却成功的应用于几乎所有与成像有关的领域,并正发挥相当重要的作用。
1.4论文结构
本文共分为6章,各章主要内容介绍如下:
第一章首先简单介绍课题研究的背景,国内外的发展状况、本系统研究的主要意义以及本论文的组织结构。
第二章主要介绍系统开发的平台,以及主要关键技术如:
VisualC++、BMP图形和BMP文件结构、图像变化的基本形式等。
第三章主要介绍本系统的系统设计目标、需求分析结果、可行性分析。
第四章主要介绍课题的功能模块设计以及详细设计过程。
先做出整体功能模块图,再对各功能模块进行概述,最后介绍个模块的流程图。
第五章主要介绍系统主要编码与实现过程。
第六章主要介绍系统运行与总结。
2关键技术
2.1VisualC++
2.1.1VisualC++简述
VisualC++(简称VC)是微软公司提供的基于C/C++的应用程序集成开发工具。
VC拥有丰富的功能和大量的扩展库,使用它能有效的创建高性能的Windows应用程序和Web应用程序。
VC的优越性主要表现在以下几个方面:
Ø开发分布式应用。
Ø开发的应用程序运行效率高、具有健壮性。
Ø能缩短软件升级周期。
Ø能够生成多线程应用,而多线程应用对于增加并发响应有实际意义。
VC除了提供高效的C/C++编译器外,还提供了大量的可重用类和组件,包括著名的微软基础类库(MFC)和活动模板类库(ATL),因此它是软件开发人员不可多得的开发工具。
VisualC++6.0是功能最为强大的可视化开发工具之一,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。
因此VisualC++6.0又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。
VisualC++具有多种优点:
它提供了面向对象的应用程序框架MFC(MicrosoftFoundationClass),简化了程序员的编程工作,提高了模块的可重用性;提供了基于CASE技术的可视化软件的自动生成和维护工具AppWizard、ClassWizard、VisualStudio、WizardBar等,实现了直观、可视的程序设计风格,方便地编辑和管理各种类,维护程序的源代码;封装了Windows的API函数、USER、KERNEL、GDI函数,简化了编程时创建、维护窗口的许多复杂的工作。
2.1.2MFC的简介
MFC的英文全称是MicrosoftFoundationClassLibrary,MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
MicrosoftVisualC++提供了相应的工具来完成这个工作:
AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
2.1.3将VisualC++应用于数字图像的几何变换
VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于VC具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具。
在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用。
2.2BMP图形和BMP文件结构
2.2.1BMP文件结构
BMP图像文件被分成4个部分:
位图文件头(BitmapFileHeader)、位图信息头(BitmapInfoHeader)、颜色表(ColorMap)和位图数据(即图像数据,DataBits或DataBody)。
第1部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。
其定义如下:
typedefstructtagBITMAPFILEHEADER
{
WORDbfType;
DWORDbfSize;
WORDbfReserved1;
WORDbfReserved2;
DWORDbfOffBits;
}BITMAPFILEHEADER,FAR*LPBITMAPFILEHEADER,
*PBITMAPFILEHEADER;
BITMAPFILEHEADER结构的各个域详细说明如下:
bfType:
位图文件类型,必须是0x424D,即字符串“BM”,也就是说,所有的“*.bmp”文件的头两个字节都是“BM”。
bfSize:
位图文件大小,包括这14个字节。
bfReserved1,bfReserved2:
Windows保留字,暂不用。
bfOffBits:
从文件头到实际的位图数据的偏移字节数,图2-1中前3个部分的长度之和。
图2-1BMP文件结构示意图
第2部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32位整数)。
其定义如下:
typedefstructtagBITMAPINFOHEADER
{
DWORDbiSize;
LONGbiWidth;
LONGbiHeight;
WORDbiPlanes;
WORDbiBitCount
DWORDbiCompression;
DWORDbiSizeImage;
LONGbiXPelsPerMeter;
LONGbiYPelsPerMeter;
DWORDbiClrUsed;
DWORDbiClrImportant;
}BITMAPINFOHEADER,FAR*LPBITMAPINFOHEADER,
*PBITMAPINFOHEADER;
BITMAPINFOHEADER结构的各个域的详细说明如下:
biSize:
本结构的长度,为40个字节。
biWidth:
位图的宽度,以像素为单位。
biHeight:
位图的高度,以像素为单位。
biPlanes:
目标设备的级别,必须是1。
biBitCount:
每个像素所占的位数(bit),其值必须为1(黑白图像)、4(16色图)、8(256色)、24(真彩色图),新的BMP格式支持32位色。
biCompresssion:
位图压缩类型,有效的值为BI_RGB(未经压缩)、BI_RLE8、BI_RLE4、BI_BITFILEDS(均为Windows定义常量)。
这里只讨论未经压缩的情况,即biCompression=BI_RGB。
biSizeImage:
实际的位图数据占用的字节数,该值的大小在第4部分位图数据中有具体解释。
biXPelsPerMeter:
指定目标设备的水平分辨率,单位是像素/米。
biYPelsPerMeter:
指定目标设备的垂直分辨率,单位是像素/米。
biClrUsed:
位图实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次幂。
biClrImportant:
位图显示过程中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。
第3部分为颜色表。
颜色表实际上是一个RGBQUAD结构的数组,数组的长度由biClrUsed指定(如果该值为零,则由biBitCount指定,即2的biBitCount次幂个元素)。
RGBQUAD结构是一个结构体类型,占4个字节,其定义如下:
typedefstructtagRGBQUAD
{
BYTErgbBlue;
BYTErgbGreen;
BYTErgbRed;
BYTErgbReserved;
}RGBQUAD;
RGBQUAD结构的各个域的详细说明如下:
rgbBlue:
该颜色的蓝色分量;
rgbGreen:
该颜色的绿色分量;
rgbRed:
该颜色的红色分量;
rgbReserved:
保留字节,暂不用。
第4部分是位图数据,即图像数据,其紧跟在位图文件头、位图信息头和颜色表(如果有颜色表的话)之后,记录了图像的每一个像素值。
对于有颜色表的位图,位图数据就是该像素颜色在调色板中的索引值;对于真彩色图,位图数据就是实际的R、G、B值(三个分量的存储顺序是B、G、R)。
下面就2色、16色、256色位图和真彩色位图分别介绍。
对于2色位图,用1位就可以表示该像素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个像素。
对于16色位图,用4位可以表示一个像素的颜色,所以1个字节可以表示2个像素。
对于256色位图,1个字节刚好可以表示1个像素。
对于真彩色图,3个字节才能表示1个像素。
2.2.2BMP图像的读写
2.2.2.1BMP图像的读:
(1)首先定义BMP文件头和信息头变量
BITMAPFILEHEADERbf;//BMP文件头结构体
BITMAPINFOHEADERbi;//BMP信息头结构体
(2)创建文件输入流fp
fp=fopen(fileName,"rb");//fileName为BMP图像文件名
(3)读取信息头、文件头
fread(&bf,sizeof(BITMAPFILEHEADER),1,fp);
fread(&bi,sizeof(BITMAPINFOHEADER),1,fp);
经过这两条程序把BMP图像的信息头、文件头赋给bf和bi变量,可以根据bf和bi得到图像的各种属性。
(4)读取BMP调色板
fread(ipRGB2,sizeof(RGBQUAD),256,fp);
(5)读取BMP位图数据
定义一个二维数组Imgdata来存取BMP位图数据
unsignedchar**Imgdata;
Imgdata=newunsignedchar*[bi.biHeight];//声明一个指针数组
for(i=0;i Imgdata[i]=newunsignedchar[(bi.biWidth*3+3)/4*4];//每个数组元素也是一个指针数组 for(i=0;i for(j=0;j<(bi.biWidth*3+3)/4*4;j++) fread(&Imgdata[i][j],1,1,fp);//每次只读取一个字节,存入数组 2.2.2.2BMP图像的写: (1)创建一个输出流fp fp=fopen("mybmp.bmp","wb"); (2)写BMP图像的信息头、文件头 fwrite(&bf2,sizeof(BITMAPFILEHEADER),1,fp); fwrite(&bi2,sizeof(BITMAPINFOHEADER),1,fp); (3)写BMP调色板 fwrite(ipRGB2,sizeof(RGBQUAD),256,fp); (4)写BMP图像的位图数据部分 for(i=(bi.biHeight)-1;i>=0;i--) for(j=0;j<(bi.biWidth*3+3)/4*4;j++) fwrite(&Imgdata[i][j],1,1,fp); 2.3图像变化的基本形式 图像的基本变换形式,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等。 2.3.1图像的平移 图像平移就是将图像中所有的点都按照指定的平移量水平、垂直移动。 设(x0,y0)为原图像上的一点,图像水平平移量为tx,垂直平移量为ty,则平移后点(x0,y0)坐标将变为(x1,y1)。 显然(x0,y0)和(x1,y1)的关系如下: 用矩阵表示如下: 对该矩阵求逆,可以得到逆变换: 即 这样,平移后的图像上的每一点都可以在原图像中找到对应的点。 例如,对于新图中的(0,0)像素,代入上面的方程组,可以求出对应原图中的像素(-tx,-ty)。 如果tx或ty大于0,则(-tx,-ty)不在原图中。 对于不在原图中的点,可以直接将它的像素值统一设置为0或则255(对于灰度图就是黑色或白色)。 同样,若有点不在原图中,也就说明原图中有点被移出显示区域。 如果不想丢失被移出的部分图像,可以将新生成的图像宽度扩大|tx|,高度扩大|ty|。 2.3.2图像的旋转 一般图像的旋转是以图像的中心为原点,旋转一定的角度。 旋转后,图像的大小一般会改变。 和图像平移一样,既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像。 可以推导一下旋转运算的变换公式。 如下图所示,点(x0,y0)经过旋转θ度后坐标变成(x1,y1)。 在旋转前: 旋转后: 写成矩阵表达式为: 2.3.3图像的缩放 图像的缩放操作将会改变图像的大小,产生的图像中的像素可能在原图中找不到相应的像素点,这样就必须进行近似处理。 一般的方法是直接赋值为和它最相近的像素值,也可以通过一些插值算法来计算。 假设图像x轴方向缩放比率为fx,y轴方向缩放比率为fy,那么原图中点(x0,y0)对应与新图中的点(x1,y1)的转换矩阵为: 其逆运算如下: 即 例如,当fx=fy=0.5时,图像被缩放到一半大小,此时缩小后图像中的(0,0)像素对应于原图中的(0,0)像素;(0,1)像素对应于原图中的(0,2)像素;(1,0)像素对应于原图中的(2,0)像素,以此类推。 在原图基础上,每行隔一个像素取一点,每隔一行进行操作。 其实是将原图每行中的像素重复取值一遍,然后每行重复一次。 3需求分析 3.1系统设计目标 需求分析简单地说就是分析用户的需求。 需求分析是设计系统的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。 需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。 调查的重点是“数据”和“处理”,通过调查、收集与分析,获得用户对数据的要求如下: (1)图像的打开、关闭及保存: 打开并显示图像,并在处理过图像后关闭或保存图像的修改。 (2)处理要求。 指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是其他处理方式,能够完成图像一般的编辑处理。 (3)处理效果与效率。 图像处理中一个很重要的问题就是如何表示有关的知识并以恰当的方式引入图像处理。 由于图像处理任务的复杂性,目前要找出一个通用的方法适应各种情况是几乎不可能的。 另一方面,在建立普适的图像处理方法时,往往会忽略某类图像具有的特定属性。 相反,针对某类特定问题,则可能找到有效的方法。 为此,有研究者提出基于对象图像处理的概念: 限定图像处理的对象为一类特殊的图像BMP,考察对象的共有属性(称为先验),并将其结合到图像处理的任务中以提供更多的信息,从而提升图像处理的性能、提高处理效果。 由于图像的处理是通过对一个个像素点进行处理,要想提高处理速度就需要寻找一个快速的处理方法。 本系统是Windows应用程序,可以进行图像的导入和导出,处理后的图片进行保存,图像的特效处理以及打印输出图片。 3.2需求分析结果 本系统的主要功能有: 1.图像文件的打开和保存,实现了对24位BMP格式图像的操作。 2.图像的复制,实现将位图像复制到其他的工具中。 3.图像的放大,实现图像按照原比例放大显示,呈现放大效果。 4.图像的缩小,实现图像按照原比例缩小显示,呈现缩小效果。 5.图像的水平翻转,实现对图像数据的左右水平方向的相互转换。 6.图像的垂直翻转,实现对图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学士学位 论文 mfc 图像 变换 系统 设计 实现
![提示](https://static.bingdoc.com/images/bang_tan.gif)