毕业论文基于VC的图像处理系统设计与实现Word下载.docx
- 文档编号:19756983
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:27
- 大小:304.35KB
毕业论文基于VC的图像处理系统设计与实现Word下载.docx
《毕业论文基于VC的图像处理系统设计与实现Word下载.docx》由会员分享,可在线阅读,更多相关《毕业论文基于VC的图像处理系统设计与实现Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
b.对测试结果进行分析
09.11.09-09.11.13
后期答辩总结阶段
1.编写毕业论文
a.学习书写毕业论文规
b.查找与所要写的论文有关资料
c.根据论文书写规编写论文
d.给指导老师审查并修改
09.11.16-09.11.26
2.交毕业设计
09.11.27
3.准备答辩
四.毕业设计(论文)结束应提交的材料:
1、测试计划
2、测试脚本
3、测试报告
4、毕业论文
指导教师教研室主任
年月日年月日
论文真实性承诺与指导教师声明
学生论文真实性承诺
本人重声明:
所提交的作品是本人在指导教师的指导下,独立进行研究工作所取得的成果,容真实可靠,不存在抄袭、造假等学术不端行为。
除文中已经注明引用的容外,本论文不含其他个人或集体已经发表或撰写过的研究成果。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
如被发现论文中存在抄袭、造假等学术不端行为,本人愿承担本声明的法律责任和一切后果。
毕业生签名:
日期:
指导教师关于学生论文真实性审核的声明
已经对学生论文所涉与的容进行严格审核,确定其容均由学生在本人指导下取得,对他人论文与成果的引用已经明确注明,不存在抄袭等学术不端行为。
指导教师签名:
日期:
摘要
本文对图形图像处理系统的发展现状和所采用的主要技术进行了详细分析,确定了相应的结构和主要功能,以与实际开发中所采取的技术。
系统在WindowsXP平台下实现,本课题是采用VisualC++作为编程工具,采用面向对象的程序设计技术实现一个图形绘制和图像处理的应用软件。
主要工作分为三类,包括基本图形绘制与编辑、简单的图像处理、图像格式的转换。
图形方面主要是设计图形基类,以与继承图形基类的具体图形类。
通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础。
系统的优点有:
充分体现了面向对象的设计思想,充分运用了C++的特性。
程序结构清晰,可读性好,程序中做了充分的注释。
最后,对系统进行测试表明,系统功能达到了预期的要求,界面友好,操作简便,运行也较稳定,是一个完成基本功能的图形图像系统。
总体上,本文介绍了系统开发设计的全过程和设计过程中部分代码,对系统中采用的关键技术也作了一些必要的说明,对图像变换的基本原理,图像处理的基本原理和各种图像格式做了详细的阐述。
关键词:
图像处理系统,图像显示,图片格式转换。
Abstract
Thisarticlehascarriedonthedetailedanalysisaboutgraphimageprocessingsystemdevelopmentandusingofthekeytechnology,identifythecorrespondingstructureandcentralfunction,aswellasthesystemadoptstechnologyintheactualdevelopment.ThesystemrealizesundertheWindowsXPplatform,thetopicuseVisualC++asaprogrammingtool,useobject-orientedprogrammingtechniquestoachieveagraphicandimageprocessingsoftware.Majorworkisdividedintothreecategories,basicdrawingandeditinggraphics,simpleimageprocessing,andimageformatconversion.Thegraphaspectisdesignsthegraphbaseclass,aswellasinheritsthegraphbaseclass’sspecificgraphclass.Throughindependentfunction'
sencapsulation,forthefuture’sneedsofthegraphicimageslaysthefoundation.Thesystemmerithas:
theobject-orienteddesign’sthoughtapplicationofthec++properties,Program’sstructureisclear,goodreadability,codeshasthefullannotationintheprogram.Easyexpansionandtransplantation.
Finally,system’stestingshows,system’sfunctionsachievetheexpecteddemand,friendlyinterface,andtheoperationissimple,alsoamuchstableoperation,ithasbasicfunctionsofthegraphicimagesystem.
Asawhole,thispaperdescribesthesystemdesignprocessandpartoftheprocessofdesigningcode,itmadesomenecessaryexplanationsaboutkeytechnologyinthesystem,itmadethedetaileddescriptiontoimagetransformofthebasicprinciple,theimageprocessingbasicprincipleandvariousimageformats.
Keyword:
Theimageryprocessingsystem,imagedisplay,imagetransforms.
第一章图像处理系统
1.1概述
图像处理技术一直是困扰VisualC++初学者的一个难题,在VisualC++中,没有一个完善的控件能够显示和处理各种格式的图像,有时用户需要了解各种图像的文件格式,这极增加了初学者的学习难度。
基于此,设计一个图像处理软件。
1.2系统分析
1.2.1需求分析
⏹通过调查,要求系统具有以下功能。
⏹显示BMP、JPEG、GIF等各种格式的图像。
⏹实现BMP与JPEG、GIF图像的批量转换。
⏹实现对位图的旋转、反色、灰度化、线性变换等各种操作。
⏹实现手写数字的识别。
1.2.2可行性分析
为了降低程序开发的难度,使用微软公司的GDI+。
GDI+又称为GDIPlus,是微软公司.NET构架的一部分,它封装了各种图像的处理技术。
通过使用GDI,用户可以非常方便地实现图像的显示与转换。
虽然GDI+属于.NET框架的一部分,但是用户可以在非.NET环境下使用GDI+,有关具体的使用方法,在以下部分进行介绍。
1.3总体设计
1.3.1项目规划
图像处理系统是一个典型的图像处理软件,它由图像显示、图像转换、图像处理、字符识别、其他和帮助等模块组成。
●图像显示模块
该模块主要包括显示位图、显示JPEG、显示GIF3个部分。
●图像转换模式
该模块主要包括位图转换为JPEG、JPEG转换为位图、位图转换为GIF、GIF转换为位图4个部分。
●图像处理模块
该模块主要包括图像旋转、图像锐化处理、图像反色处理、灰度化处理、线性变换5个部分。
●字符识别模块
该模块主要包括手写数字识别。
●其他模块
该模块主要包括设置菜单的固定颜色和随机颜色两个部分。
●帮助模块
该模块主要包括软件的版本、开发单位等信息。
1.3.2系统功能架构图
系统功能构架图如图1.1所示
图1.1图像处理系统功能架构图
1.4系统设计
1.4.1设计目标
本系统属于小型的图像处理软件,主要用于实现图像的显示与批量转换操作。
具体设计要求如下。
●实现各种图像格式的显示。
●系统采用良好的人机对话模式,界面设计美观、友好。
●支持图像的单一转换与批量转换。
●实现位图的各种常规操作。
例如图像旋转、灰度化处理、线性变换等。
●系统运行稳定、安全可靠。
1.4.2开发与运行环境
系统开发平台:
VisualC++6.0。
运行平台:
WindowsXP/Windows2000/Windows2003。
分辨率:
最佳效果1024*1280像素。
1.5技术准备
1.5.1基本绘图操作
绘图操作通常是指在窗口的某个区域输出位图图像。
窗口通常关联一个设备上下文CDC,所有的绘图操作都是通过CDC来完成的。
用户可以通过调用窗口类的GetDC方法获得一个CDC对象指针。
CDC提供BitBlt、StretchBlt等方法来输出位图,但是这些方法均需要借助另一个CDC对象来实现。
如何设置源设备上下文,并调用BitBit方法输出位图。
CDC*Pdc=GetDC();
//获取窗口设备的上下文
CBitmapbk;
//定义位图对象
CDCmemdc;
//定义设备上下文
memdc.CreateCompatibleDC(pDC);
//创建一个兼容的设备上下文
bk.LoadBitmap(IDB_CHESSBOARD);
//加载位图对象
memdc.SelectObject(&
bk);
//选中位图
pDC->
BitBlt(0,600,600,&
memdc,0,0,SRCCOPY);
//调用BitBlt方法输出位图
1.5.2存画布的设计
在绘制图像时,如果频繁的进行多次绘图操作,会出现闪烁的情况。
为了防止闪烁的出现,可以设计一个临时的画布,称之为存画布,让所有的绘图操作均在存画布上进行,然后在存画布对象失去作用域时将其输出到目标设备上下文中,这样就阻止了闪烁情况的出现,存画布的设计代码如下:
m_pbmp->
CreateCompatibleBitmap(Pdc,rect.Width(),rect,Height());
m_poldbmp=SelectObject(m_bmp);
//选中位图对象
m_Pdc=PdC;
//设置成员变量
m_Rect=rect;
//将目标区域绘制在存画布上
this->
BitBlt(m_Rect.left,m_Rect.top,m_Rect.Width(),m_Rect.Height(),
Pdc,m_Rect.left,m_Rect.top,SRCCOPPY);
SelectObject(m_poldbmp);
//选中之前选中的对象
If(m_pbmp!
=NULL)//判断位图对象是否为空
deletem_pbmp;
//释放位图对象
DelectObject(this);
//释放设备上下文
存画布CMemDC只包含一个构造函数和析构函数,其中,在构造函数部分,将根据参数pDC创建一个兼容的设备上下文,并且将pDC的容绘制在存画布上;
在析构函数中,会将存画布的容输出到目标设备的上下文中。
1.5.3自定义全局函数
在VisualC++中没有提供直接的函数用于获取文件的名称(去除扩展名)和获取文件的扩展名(去除文件名)。
为此,定义了两个全局函数来获取文件的名称和文件扩展名。
函数定义如下:
CStringExtractFileName(CString&
str)//获取文件名称
{
intpos=str.ReverseFind(‘.’)}//反向查找“.”的位置
returnstr.Left(pos);
//从左方开始截取字符串,并返回截取的字符串
}
CStringGetFileExtendedName(CString&
strFile)//获取文件扩展名
intpos=strFile.ReverseFind(‘.’);
//反向查找“.”的位置
returnstrFile.Right(strFile.GetLength()-pos-1)
菜单栏高度
在为本系统设计自定义菜单时,由于主界面对话框的宽度可以调整,导致菜单栏的高度会发生变化,如图1.2所示。
图1.2菜单栏高度
从1.2中可以发现,当对话框的宽度变化时,菜单栏的高度也会发生变化,这在绘制菜单的背景颜色时候会带来困难,需要从user32.dll动态库中导出该函数。
流程图如下:
1.5.4自定义菜单
为了使程序界面更加美观,在本系统中自定义了一个菜单,实现菜单的特殊效果显示,如图1.3所示:
图1.3自定义菜单
在VisualC++中,实现自定义菜单是比较容易的,MFC类库提供了CMenu
类用于设计菜单,用户只要从该类派生一个子类,然后改写MeasureItem方法,设置菜单项的高度和宽度;
改写DrawItem方法,根据菜单项的不同状态,绘制不同效果的菜单项就可以了。
具体设计如下:
(1)从CMenu类派生一个子类CCustomMenu。
(2)定义一个菜单项结构CMenuItem,记录菜单项的信息。
代码如下:
//定义一个结构,记录菜单项的详细信息
StructCMenuItem
CStringm_Menutext;
//菜单项的文本
UINTm_ImageIndex;
//菜单项图像索引
Intm_MenuType;
//菜单项的类型-2:
顶层菜单,-1:
弹出式菜单,0:
分隔条,其他:
普通菜单
(3)向CCustomMenu类中添加成员变量。
(4)在CCustomMenu类的构造函数中初始化成员变量。
CCustomMenu:
:
CCustomMenu()
m_ItemCount=0;
//初始化菜单项数量
m_Index=0;
//初始化整型变量
m_MenuList=NULL;
//初始化菜单列表
m_BkColor=RGB(204,199,186);
//初始化背景颜色
m_SelTopColor=RGB(193,210,238);
//初始化顶层菜单颜色
m_RandColor=FALSE;
//是否采用随机颜色
(5)在CCustomMenu类的析构函数中释放成员变量占据的堆空间。
~CCustomMenu()
if(m_ItemCount>
0)//如果菜单项>
0,则释放菜单列表
delete[]m_MenuList;
(6)向CCustomMenu类中添加GetAllItemCount方法,获取菜单项的数量,当前流程图如下:
(7)向CCustomMenu类中添加AttachMenu方法,附加菜单句柄到CCustomMenu类对象上
BOOLCCustomMenu:
AttatchMenu(HMENUhMenu)
Attach(hMenu);
//附加菜单句柄到菜单对象
GetAllItemCount(hMenu,m_ItemCount);
//获取菜单项的数量
if(m_ItemCount>
0)//判断菜单项数量是否>
m_MenuList=newCMenuItem[m_ItemCount];
//创建菜单列表
returnTRUE;
(8)向CCustomMenu类中添加SetMenuItemInfo方法,将每个菜单项关联一个CMenuItem结构对象。
(9)向CCustomMenu类中添加GetTopMenuWidth方法,获取顶层菜单的高度。
(10)向CCustomMenu类中添加GetClientMenuRgn方法,获取菜单栏中的非菜单项区域。
//获取菜单栏中非菜单项区域
HRGNCCustomMenu:
GetClientMenuRgn()
MENUBARINFOMenuInfo;
//定义菜单项信息对象
memset(&
MenuInfo,0,sizeof(MENUBARINFO));
//初始化菜单项信息
MenuInfo.cbSize=sizeof(MENUBARINFO);
//设置菜单项信息结构的大小
GetMenuBarInfo(AfxGetMainWnd()->
m_hWnd,OBJID_MENU,0,&
MenuInfo);
CRectrc=MenuInfo.rcBar;
//获取菜单栏的区域
intMenuCount=GetMenuItemCount();
//获取顶层菜单的数量
CRect*pRC=newCRect[MenuCount];
//定义一个区域指针,记录菜单项区域
HRGN*pRgn=newHRGN[MenuCount];
//定义一个选区指针,记录菜单项选区
CRectwinRC;
//定义一个区域对象
AfxGetMainWnd()->
GetWindowRect(winRC);
//获取主窗口区域
HRGNretRgn=CreateRectRgn(0,0,0,0);
HRGNMenuClientRgn=CreateRectRgn(0,0,0,0);
for(intj=0;
j<
MenuCount;
j++)//组合菜单项的区域
//去除菜单栏中菜单项的区域,以获取非菜单项区域
CombineRgn(retRgn,MenuRgn,MenuClientRgn,RGN_DIFF);
for(j=0;
j++)
(11)向CCustomMenu类中添加SetMenuItemText方法,绘制菜单项文本。
voidCCustomMenu:
SetMenuItemText(CDC*pDC,LPSTRstrMenuText,CRectRect)
Rect.DeflateRect(20,0);
pDC->
DrawText(strMenuText,Rect,DT_SINGLELINE|DT_VCENTER|DT_LEFT);
(12)向CCustomMenu类中添加DrawTopMenuBk方法,绘制顶层菜单的背景颜色。
(13)向CCustomMenu类中添加DrawSepMenu方法,绘制菜单分隔条。
DrawSepMenu(CDC*pDC,CRectRect)
Draw3dRect(Rect,RGB(255,0,0),RGB(0,0,255));
(14)向CCustomMenu类中添加DrawMenuBk方法,绘制菜单项的背景颜色。
DrawMenuBk(CDC*pDC,CRectRect,COLORREFSrcColor,COLORREFDesColor,BOOLState)
if(State)
{
pDC->
Rectangle(Rect);
Rect.DeflateRect(1,1);
intr1,g1,b1;
//读取渐变起点的颜色值
r1=GetRValue(SrcColor);
g1=GetGValue(SrcColor);
b1=GetBValue(SrcColor);
intr2,g2,b2;
//读取渐变终点的颜色值
r2=GetRValue(DesColor);
g2=GetGValue(DesColor);
b2=GetBValue(DesColor);
floatr3,g3,b3;
//菜单区域水平方向每个点RGB值应该变化的度(围)
r3=((float)(r2-r1))/(float)(Rect.Height());
g3=(float)(g2-g1)/(float)(Rect.Height());
b3=(float)(b2-b1)/(float)(Rect.Height());
COLORREFr,g,b;
//菜单区域水平方向每个点的颜色值
CPen*pOldPen;
for(inti=Rect.top;
i<
Rect.bottom;
i++)
{
r=r1+(int)r3*(i-Rect.top);
g=g1+(int)g3*(i-Rect.top);
b=b1+(int)b3*(i-Rect.top);
CPenpen(PS_SOLID,1,RGB(r,g,b));
pOldPen=pDC->
SelectObject(&
pen);
pDC->
MoveTo(Rect.left,i);
LineTo(Rect.right,i);
SelectObject(pOldPen);
}
}
else
{
Fi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 基于 VC 图像 处理 系统 设计 实现