基于VC的图像处理软件模块设计讲解.docx
- 文档编号:30777782
- 上传时间:2023-08-23
- 格式:DOCX
- 页数:32
- 大小:576.65KB
基于VC的图像处理软件模块设计讲解.docx
《基于VC的图像处理软件模块设计讲解.docx》由会员分享,可在线阅读,更多相关《基于VC的图像处理软件模块设计讲解.docx(32页珍藏版)》请在冰豆网上搜索。
基于VC的图像处理软件模块设计讲解
本科生毕业论文(设计)
题目:
基于VC++的嵌入网页图像处理软件模块设计
姓名:
学院:
工学院
专业:
电子信息科学与技术
班级:
信息84
学号:
指导教师:
职称:
2012年5月1日
目录
摘要:
1
关键词:
1
Abstract:
1
Keywords:
1
引言1
1论文概述1
1.1课题的研究目的和意义1
1.2国内外发展状况2
1.3研究方法与手段3
1.3.1运行环境3
1.3.2开发环境3
2图像处理相关技术概述3
2.1VC++6.0简介3
2.2VC++各类文件简介4
2.3MFC类库4
3.图像处理软件的总体设计5
3.1需求分析5
3.2图像处理软件的目标设计5
3.3图像处理系统功能描述5
4.图像设计基础5
4.1图像基础5
4.1.1数字图像的基本概念5
4.1.2调色板6
4.1.3调色板的概念7
4.2与设备无关位图(DIB)7
4.2.1DIB位图的结构7
4.2.2定义DIB处理函数集8
4.2.3CDib类的设计目标11
5数字图像处理11
5.1图像处理的基本方法12
5.2图像处理软件设计13
5.2.1设计步骤和要点13
5.2.2主界面设计14
5.2.3菜单设计15
5.2.4工具栏设计16
5.3数字图像处理结果16
6评估与结论19
致谢20
参考文献21
基于VC++的嵌入网页图像处理软件模块设计
电子信息科学与技术专业学生
指导教师
摘要:
随着计算机技术和网络技术的快速发展,社会生产力和精确农业技术也得到逐步发展,人们对农田除害智能识别技术的要求也越来越高,因此,需要将机器人技术计算机技术网络技术等应用于农田除害。
该课题在windowsXP平台上实现,采用VisualC++作为编程工具,采用面向对象的程序设计技术完成一个嵌入网页的图像处理(图像只要指农田害虫)的应用软件。
图形方面主要是设计图形基类,以及继承图形基类的具体图形类。
此外,通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础。
系统的优点有:
充分体现了面向对象的设计思想,充分运用了C++的特性,比如封装、继承、多态。
程序结构清晰,可读性好,程序中做了充分的注释。
关键词:
VisualC++;图像处理;农田害虫;
BasedonVC++imageprocessingsoftwaremoduledesignofembeddedwebpage
StudentmajoringinElectronicandInformationScienceandTechnology
Tutor
Abstract:
Withtherapiddevelopmentcomputertechnologyandnetworktechnology,thedevelopmentofsocialproductiveforcesandthedevelopmentofprecisionagriculturetechnologypeople'sdemandofagriculturalpestidentificationtechnologymoreandmorehighneedtoroboticstechnology,computertechnologynetworkusedinagriculturalpesticides.ThetopicrealizesunderthewindowsXPplatform,useVisualC++asaprogrammingtool,useobject-orientedprogrammingtechniquestoachieveaimageprocessingsoftware.Thegraphaspectisdesignsthegraphbaseclass,aswellasinheritsthegraphbaseclass’sspecificgraphclass.Throughindependentfunction'sencapsulation,forthefuture’sneedsofthegraphicimageslaysthefoundation.Thesystemmerithas:
theobject-orienteddesign’sthoughtapplicationoftheC++properties,forexampleencapsulation,polymorphism,andinheritance.Program’sstructureisclear,goodreadability,codeshasthefullannotationintheprogram.Thegraphplan’sparthasavoidedcomplicatedstructureofthetraditionalswitchcase.Easyexpansionandtransplantation.
Keywords:
VisualC++;imageprocessing;Agriculturalpest;
引言数字图像处理(DigitalImageProcessing)是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,图像处理的方法多种多样,一般可分为图像变换、图像增强和复原、图像分割、图像压缩编码、图像描述和图像识别等几类。
目前,图像处理的应用领域已涉及到人们工作生活中的方方面面。
1论文概述
1.1课题的研究目的和意义
本文所介绍的数字图像处理系统是一款简单而又实用的灰度级图像处理软件,是基于Windows平台的应用程序,利用VisualC++6.0的编译环境提高了系统的开发速度,实现数字图像的查看与编辑操作[1]。
应该说,目前已有种类繁多的图形图像处理专用软件工具,如AutoCAD、和PhotoShop等,利用这些图形图像处理软件可以实现同样的功能。
即便如此,研究这些图形图像处理技术仍具有一定使用价值。
首先,利用一个设计良好的简单的小图形处理程序可以用于教学演示的目的,展示基本的图形图像处理技术和面向对象技术在这一领域的应用效果。
其次,在很多应用中需要提供自己的图形图像处理功能,例如,在一个正在连接网络的任务中可能就希望显示一幅示意性的动画,此时,不能依赖一个图形软件来实现。
因此,通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础[2]。
此外,借助VisualC++语言这种典型的面向对象编程环境,能够充分挖掘硬件的潜能,得到性能优良的程序代码。
1.2国内外发展状况
数字图像处理(DigitalImageProcessing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。
数字图像处理的产生和迅速发展主要受三个因素的影响:
一是计算机的发展;二是数学的发展(特别是离散数学理论的创立和完善);三是广泛的农牧业、林业、环境、军事、工业和医学等方面的应用需求的增长。
20世纪20年代,图像处理首次应用于改善伦敦和纽约之间海底电缆发送的图片质量。
到20世纪50年代,数字计算机发展到一定的水平后,数字图像处理才真正引起人们的兴趣。
1964年美国喷气推进实验室用计算机对“徘徊者七号”太空船发回的大批月球照片进行处理,收到明显的效果。
20世纪60年代末,数字图像处理具备了比较完整的体系,形成了一门新兴的学科。
20世纪70年代,数字图像处理技术得到迅猛的发展,理论和方法进一步完善,应用范围更加广泛。
在这一时期,图像处理主要和模式识别及图像理解系统的研究相联系,如文字识别、医学图像处理、遥感图像的处理等。
20世纪70年代后期到现在,各个应用领域对数字图像处理提出越来越高的要求,促进了这门学科向更高级的方向发展。
特别是在景物理解和计算机视觉(即机器视觉)方面,图像处理已由二维处理发展到三维理解或解释。
近年来,随着计算机和其它各有关领域的迅速发展,例如在图像表现、科学计算可视化、多媒体计算技术等方面的发展,数字图像处理已从一个专门的研究领域变成了科学研究和人机界面中的一种普遍应用的工具。
图形与图像处理是计算机最早应用的领域之一,从简单的图形显示到复杂的图像分析、模式识别,使得图形与图像处理技术不断走向成熟,国内外也涌现出了大量的软件。
例如,ACDSee、PhotoShop、CorelDraw等,这些软件提供了一般显示、特殊显示、特技处理等大量复杂的功能。
图形处理技术得益于图形学的发展,而从目的上可以将图像处理技术分为两类,分别是图像识别技术和图像处理技术。
针对图像处理技术,可以是旋转、亮度、对比度、饱和度、RGB调节、调节图像尺寸等属性方面的处理技术和添加文字、图像增强、弱化、水印、特效、镂空等处理方法。
甚至为了达到更精微的处理效果,这些软件还使用了图层。
随着网络和多媒体技术的发展和应用,体现在应用软件中的是一些更具有“现代感”的应用,例如,支持各种常用图形、RAW原始图片、Flash动画的快速浏览、编辑、保存、导入、导出,甚至还可以提供一些趣味涂鸦、字符素描之类的应用,以体现人的个性[3]。
事实上,应用软件中常常需要采用其中的某些技术来处理相关的问题。
例如,一个支持简单形状辅助设计的软件并不需要支持特效方面的方法。
在软件设计的支撑环境和技术上,C++是一个很好的选择,这主要是考虑到如下因素,主要包括代码效率高,处理底层问题能力强,支持面向对象的程序设计方法。
利用C++技术可以实现对程序代码和数据的良好封装,使之能够具有良好的重用性。
1.3研究方法与手段
1.3.1运行环境
运行环境主要介绍了硬件环境和软件环境。
(1)硬件环境
①处理器:
InterPentium166MX或更高
②内存:
32MB或更高
③硬盘空间:
1GB或更高
④显卡:
SVGA显示适配器
(2)软件环境
操作系统:
Window98/ME/2000/XP
1.3.2开发环境
开发环境主要介绍了本系统采用的操作系统、开发语言。
(1)操作系统:
WindowsXP
(2)开发语言:
C++
(3)开发环境:
VisualC++6.0
2图像处理相关技术概述
2.1VC++6.0简介
面向对象程序设计(Object-OrientedProgramming,简称OOP)方法已出现近30年,在20世纪90年代己成为程序设计的主流方向。
面向对象程序设计语言是现代程序开发的主要工具。
程序包含两类基本的元素,即数据和操作数据的指令集(称为代码)。
传统的程序设计语言以设计代码为核心,程序设计实际上就是指定程序指令的先后次序,数据表示必须适应代码的设计。
模块化程序设计方法将完成某一功能的指令集组成一个相对独立的程序模块(即函数或过程),使得程序的结构清晰,便于有效的维护,对程序设计技术有很大的促进。
但由于结构化程序设计方法并不能保证各程序模块之间真正的相互独立,程序设计者在设计一个模块时很难完全排除其他模块的影响。
随着程序规模的增大,各模块之间的相互影响导致一些难于测试,难以定位发现的错误,增加了程序开发和维护的困难。
面向对象程序设计方法主要以数据为中心,代码是围绕着需要处理的数据而设计的[4]。
VC++6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(MicrosoftFoundationClass)类库。
MFC中封装了大部分WindowsAPI函数和Windows控件,它包含的功能涉及到整个Windows操作系统。
MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。
另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。
因此,使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单[5]。
2.2VC++各类文件简介
.dsw文件
这种类型的文件在VC中级别是最高的,成为Workspace文件。
在Workspace文件中可以包含多个Project,由Workspace文件对它们进行统一的协调和管理。
.dsp文件
以dsp为扩展名的文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息,每个工程都对应有一个dsp类型的文件。
.clw文件
以clw为扩展名的文件是用来存放应用程序中用到的类和资源的信息的,这些信息是VC中的ClassWizard工具管理和使用类的信息来源。
readme.txt文件
对应每个应用程序有一个readme.txt文件,这个文件中列出了应用程序中用到的所有的文件信息,打开并查看其中的内容就可以对应用程序的文件结构有一个基本的认识。
.h和.cpp文件
在应用程序中大量应用的是以h和cpp为扩展名的文件,以h为扩展名的文件称为头文件;以cpp为扩展名的文件称为实现文件,一般说来h为扩展名的文件与以cpp为扩展名的文件是一一对应配合使用的,在h为扩展名的文件中包含的主要是类的定义,而在cpp为扩展名的文件中包含的主要是类成员函数的实现代码。
.rc文件
VC中以rc为扩展名的文件称为资源文件,其中包含了应用程序中用到的所有的windows资源,需要注意的是rc文件可以直接在VC集成环境中以可视化的方法进行编辑和修改[6]。
2.3MFC类库
MFC,微软基础类(MicrosoftFoundationClasses),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是Windows下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分。
微软基础类库由两部分组成:
一是通常所说的C++类库,是MFC类库的主体部分,这些类构成了MFC应用程序框架。
二是MFC预定义宏、全局变量和全局函数,是MFC类库的辅助部分,它们都是MFC进行Windows应用程序开发不可缺少的组成部分。
MFC使得开发windows应用程序比以往任何时候都要容易,虽然我们要编写的应用程序在功能上千差万别,但是从本质上来讲,都可以划归为用户界面的设计,对文件的操作,多媒体的使用,数据库的访问等一些最主要的方面。
这一点正是微软提供MFC类库最重要的原因,在这个类库中的某个对象能完成所需要的功能,这时我们只要简单地调用已有对象派生出我们自己的对象,这时派生出来的对象除了具有类库中的对象的特性和功能之外,还可以由我们自己根据需要加上所需的特性和方法,并根据需要来不断完善对象的功能。
正是由于MFC编程方法充分利用了面向对象技术的优点,它使得我们编程时极少需要关心对象方法的实现细节,同时类库中的各种对象的强大的功能足以完成我们程序中的绝大部分所需的功能,这使得应用程序中程序员所需要编写的代码大为减少,有力地保证了程序的良好的可调试性。
需要指出的是MFC类库在提供的对象的各种属性和方法都是经过谨慎的编写和严格的测试,可靠性很高,这就保证了使用MFC类库不会影响程序的可靠性和正确性。
3.图像设计基础
3.1图像基础
3.1.1数字图像的基本概念
人眼看到的任何自然界的图像都是连续的模拟图像,其形状和形态表现由图像各位置的颜色所决定。
色度学理论认为,任何颜色都可由红(Red)、绿(Green)、蓝(Blue)3种基本颜色按不同的比例混合得到。
红、绿、蓝被称为三原色,简称RGB三原色。
因此,自然界的图像可用基于位置坐标的三维函数来表示,即
f(x,y,z)=(fred(x,y,z),fgreen(x,y,z),fblue(x,y,z)))(3-1)
其中f表示空间坐标为(x,y,z)位置点的颜色,fred、fgreen、fblue分别表示该位置点的红、绿、蓝3种原色的颜色分量值。
它们都是空间的连续函数,即连续空间的每—点都由一个精确的值与之相对应。
为了研究的方便,主要考虑平面图像。
平面上每一点仅包括两个坐标值。
因此,平面图像函数是连续的二维的数,即
f(x,y)=(fred(x,y),fgreen(x,y),fblue(x,y)))(3-2)
图像可以分为黑白图像和彩色图像。
所谓黑白图像,就是图像中每一点都不是彩色的,即每—点的红、绿、蓝颜色分量值都相等,即
fred=fgreen=fblue(3-3)
对于黑白图像,其f(x,y)表示(x,y)位置处的灰度值。
由于计算机仅能处理离散的数据,所以如要用计算机来处理图像,连续的图像函数必须转化为离散的数据集,这一过程叫做图像采集[7]。
图像采集由图像采集系统完成,如图3-1所示。
图像采集系统包括3个基本单元,即成像系统、采样系统和量化器。
图3-1图像采集系统
3.1.2调色板
现实世界的颜色种类是无限的,但计算机显示系统所能表现的颜色数量是有限的。
因此,为了使计算机能最好地重现实际图景,就必须采用一定的技术来管理和取舍颜色。
按表现能力的不同,现代计算机的显示系统可以分为以下3种。
(1)VGA:
能用640×480的分辨率同时显示16种颜色。
(2)SuperVGA:
能用640×480的分辨率同时显示256种颜色
(3)真彩色:
能同时显示16777216种颜色。
所谓真彩色(TrueColor),是指显示出来的图像的颜色与真实世界中的颜色非常自然逼真、人眼难以区分它们的差别。
通常使用RGB表示法来表现真彩色图像,即用3字节(24位)来表示—个真彩色像素的颜色值,红、绿、蓝三原色的浓度分别用一字节(8位)来表示。
Windows采用该方法来表现颜色,其SDK提供一个名为RGB的宏来将不同的R、G、B颜色值转化为24位的颜色值,其原型如下所示。
COLORREFRGB(BYTEbRed,BYTEbGReen,BYTEbBlue)(3-4)
COLORREF是表示颜色值的数据类型,是一个32位的无符号长整数;bRed、bGreen和bBlue分别表示红、绿、蓝三原色的浓度,它们的类型是BYTE,长度是8位。
其十六进制数据表示形式如下所示。
0x00bbggrr(3-5)
字节rr、gg、bb比分别表示红、绿、蓝三原色的浓度,最高位字节为0,用于保留与将来的系统兼容[8]。
3.1.3调色板的概念
在真彩色系统中,每一个像素的值都用24位来表示。
像素值与真彩色颜色值可以一一对应,所以像素值就是所表现的颜色位。
但对于仅能同时显示16色或256色的系统,每一个像素仅能分别采用4位或8位来表示,像素值与真彩色颜色值不能一一对应,用像素值代表颜色值的方法将不能得到最佳的效果,而必须采用调色板技术。
所谓调色板就是在16色或256色显示系统中,由图像中出现最频繁的16种或256种颜色所组成的颜色表。
对这些颜色按4位或8位,即0至15或255进行编号,每一编号代表其中的一种颜色。
这种颜色编号叫做颜色的索引号,4位或8位的索引号与24位的颜色值的对应表叫做颜色查找表。
使用调色板的图像叫做调色板图像。
它们的像素值并不是颜色值,而是颜色在调色板查找表中的索引号[9]。
为了保证Windows的基本显示界面的一致性,Windows保留了一个有20种颜色的内部系统调色板,用来绘制窗口的图标、边界和按钮等通用界面。
该调色板在所有的显示设置中都保持不变。
在16色的显示系统中,系统调色板通过16种颜色的抖动来产生其余4种颜色。
在256色的显示系统中,Windows也保持该20种颜色的次序,其余的236种颜色由当前的调色板分配[10]。
3.2与设备无关位图(DIB)
Windows3.1以上版本提供了对设备无关位图DIB的支持。
DIB位图可以在不同的机器或系统中显示位图所固有的图像。
与DDB相比而言,DIB是一种外部的位图格式,经常存储为以.BMP为后缀的位图文件(有时也以DIB为后缀)。
DIB位图还支持图像数据的压缩[11]。
大多数图像处理都是基于与设备无关位图(DIB)来进行讨论的,而MFC中没有处理DIB位图的类,这就给编程带来了很大困难。
所以需要建立一个处理DIB位图的专用类,CDIB类,在其中封装必要而有效的处理函数。
3.2.1DIB位图的结构
DIB位图文件的结构如图3-2所示,包括位图文件头结构BITMAPEHEADER、位图信息头结构BITMAPINFOHEADER、位图颜色表RGBQUAD和位图像素数据4部分。
位图文件头结构BITMAPEHEADER
位图信息头结构BITMAPINFOHEADER
位图颜色表RGBQUAD
位图像素数据
图3-2DIB位图的结构
上面结构中各数据域的意义如表3-1所示。
表3-1Windows位图结构数据域的含义
结构
数据域
含义
BITMAPFILEHEADER
Bftype
字节“BM”
bfSize
文件总字节数
bfResrved1
0
bfResrved2
0
bfOffBits
位图数据距文件头的偏移量
BITMAPINFOHEADER
biSize
本结构大小的字节数
biWidth
位图的宽度,单位为像素点
biHeight
位图的高度,单位为像素点
biPlanes
1
bitBitCount
像素的位数(1,4,8,24)
biCompression
压缩方式(0表示不压缩)
biSizeImage
位图数据的字节数
biXpelsPerMeter
水平分辨(像素点每米)
biYpelsPerMeter
垂直分辨(像素点每米)
biClrUsed
图像中使用的颜色数
biClrImportant
图像中重要的颜色数
RGBQUAD
rgbBlue
蓝色的比例
rgbGreen
绿色的比例
rgbRed
红色的比例
rgbReserved
0
DIB位图像素的位数可为1、4、8和24,其图像的颜色数分别为2、16、256和真彩色其中前3种具有对应的颜色表,而24位位图的颜色表为空,其像素值就是颜色值[12]。
3.2.2定义DIB处理函数集
由于DIB位图能独立地保存固有的图像处理信息,能在不同的系统中重显其图像,因此成为Windows环境中的基本图像格式。
由于MFC中没有涉及处理DIB位图的类,因此,利用VisualC++进行DIB位图编程时只能使用“非面向对象”,即直接调用Win32SDK的有关API函数。
因此,我们要定义一个处理DIB位图的专用类,比如一个名为CDib的类,在其中封装必需而且有效的DIB数据成员
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于VC 的图像处理软件模块设计讲解 基于 VC 图像 处理软件 模块 设计 讲解