ImageVerifierCode 换一换
格式:DOCX , 页数:49 ,大小:1.46MB ,
资源ID:4809065      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4809065.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(图像处理综合系统方案.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

图像处理综合系统方案.docx

1、图像处理综合系统方案第16章 图像处理综合系统.chnfee.友情制作本章导读本章介绍以下2个综合系统: 画笔系统 综合图像处理系统16.1 画笔系统综合前面所学过的有关图像处理特效的知识,编写图像处理综合系统。此系统能够实现图片的浏览、放大和缩小、旋转、灰暗化,以与在图片上画出能够设置颜色和线条宽度的线。16.1.1 实例原理应用通用对话框控制文件的打开,选取预设格式的图片加载到图片框中进行浏览。在VB中Form,PictureBox和Printer都有PaintPicture方法,它们可以满足按一定比例对图片的大小进行缩小与放大的要求。这个方法的功能是复制图像,其基本语法如下: objec

2、t.PaintPicture picture, x1, y1, width1, height1, x2, y2,_ width2, height2, opcode 这里的Picture来自Form等的Picture属性,而x1,y1是目标区域的左上角坐标,而x2,y2是源区域的左上角坐标,width1和height1是目标区域的宽度和高度,而width2和height2是源区域的宽度和高度,如果width1=width2且height1=height2,那么就是等比例复制,只需要选择适当的参数就可以实现图片的缩小与放大。参数opcode是操作码,其含义可以参考Windows API中关于Bit

3、Blt和StretchBlt函数的介绍。对图像的旋转我们采用的是逐点计算法。图像是由多个点组成的,如果将每一个点都按一定的角度进行旋转,整幅图像也就进行了旋转。因此,图像的旋转就变为点的旋转,利用逐点计算的方法就可以实现整幅画面的旋转。在图片上画图应用了鼠标的MouseDown,MouseUp和MouseMove事件,通过逻辑变量来控制画笔和橡皮是否可用,使用PictureBox控件的Line方法用鼠标点击相应的图标即可设置线条宽度DrawWidth属性。16.1.2 实例演示运行该程序可看到如图16-1所示的图像处理综合系统界面。在程序的主界面中,有两个PictureBox,左面的为“操作区

4、域”,右面的为“对比区域”,“对比区域”用来与在“操作区域”载入图片进行放大、缩小等处理时的对比。操作区域同时也具有画板的功能。在“工具”栏中选择画笔工具,然后在“颜色”框中选择画笔颜色,接着在“线宽”栏中选择画笔的线宽,当在“操作区域”按下鼠标左键并移动鼠标时就可以实现画图功能了,橡皮工具可以把需要擦除的区域设置成背景色,以实现擦除的效果。图像综合处理中的画图如图16-2所示。图16-1 图像处理综合系统界面图16-2 图像综合处理中的画图载入图片后,画图工具仍然可用,你可以在图片上进行画图操作。在“编辑”栏中点击“打开”命令按钮,选择图片载入程序,选择的图片将同时载入“操作区域”和“对比区

5、域”,“操作区域”将根据图片的大小显示和隐藏滚动条,以便浏览图片,如图16-3所示。载入图像后就可以对图片进行相应的操作,点击“编辑”栏中的“放大”命令按钮,“操作区域”中的图片行对于“对比区域”将被放大,你可以拉动水平或垂直滚动条来浏览放大后的图像(如图16-4所示)和缩小后的图像(如图16-5所示)。在前面的多媒体学习中我们已经学习了图片的旋转,和这里的图片旋转完全一样。点击“左旋”或“右旋”命令按钮,就能够使整副图片向左(如图16-6)或向右(如图16-7)旋转90,如果想旋转更大的角度只需要多点击几次就可以实现,不过旋转的角度要是90的整数倍。除了对调整图像大小和旋转图像,本程序还提供

6、了画面变暗的效果,单击“编辑”栏中的“变暗”命令按钮,“操作区域”中的图片将会变暗,与“对比区域”形成鲜明的对比,如图16-8所示。图16-3 将图片载入程序 图16-4 浏览放大后的图像图16-5 浏览缩小后的图像 图16-6 向左旋转图片图16-7 向右旋转图片 图16-8 图片变暗如果在图片上使用了画图工具或者将图片变暗后,当单击“编辑”栏中的“恢复”命令按钮后,“操作区域”就会恢复到图16-3时的载入状态。单击“退出”按钮结束程序。16.1.3 实例实现由于篇幅有限,本案例代码被省略其代码请查看光盘,路径: chap16ex_01。16.2 综合图像处理系统本节将介绍一个功能强大的数字

7、图像处理系统。通常,对于要求很高的数字图像处理,一般都是通过Visual C+来实现,在Visual Basic中,如果要进行大规模的图像处理,可以调用通过C+编译的动态库来实现。但是很多时候,只需要使用到部分图像处理功能,或者对图像处理速度要求不是很高的时候,通过Visual Basic本身也能够进行各种数字图像的处理。 本节介绍的系统将提供以下功能:(1)能够显示各种文件类型的图片;(2)能够保存成多种文件格式的图片;(3)能够实现图像漫游, 浏览大图片的时候,可以通过鼠标拖动图片或者通过键盘方向键来移动大图片;(4)能够选取图像;(5)能够进行图像的复制粘贴;(6)能够放大、缩小图像、查

8、看原始图像大小、以与自适应显示图像即随着窗体的大小将图像全部显示在窗体中;(7)能够撤销或者重复上一步的操作;(8)当前编辑图像的状态显示;(9)能够进行多种颜色之间的转化,如黑白图、16色灰度图、256色灰度图等;(10)能够改变图像的大小;(11)能够旋转图像;(12)能够镜像图像;(13)常用的图像参数调整,如饱和度调整、亮度调整、 对比度调整;(14)能够选取图像中任一像素的颜色值;(14)常用的各种图像处理技术,如Greys、Negative、Sepia、Colorize、Replace HS、Replace L、Shift、Blur、Soften、Sharpen、Diffuse、P

9、ixelaze、Despeckle、Contour、Emboss、Outline、Relieve、Noise、Scanlines、Dilate、Erode、Texturize等;(15)各种常见的图像特效效果,如百叶窗效果、马赛克效果、翻页效果等;(16)快速查看放大图像的局部位置; 16.2.1编程原理本系统文件很多,设计了很多的编程技术和原理,下面就重点介绍其中的一些比较重要的编程技术和原理。1自定义控件开发本系统中,使用了4个自定义的控件,分别是ucCanvas、ucInfo、ucProgress以与ucToolbar,这些控件都不是Visual Basic自带的,也不是第三方控件,而是

10、通过Visual Basic提供的工具来开发的。很多时候为了实现某个功能,或者实现代码的管理,自己开发一个控件是一个很好的选择。开发自定义控件,很多语言都可以实现,如Visual C +、Visual Basic、Delphi等,在Visual Basic中开发控件,非常简单方便,下面简单介绍自定义开发组件的过程。 (1)创建或者添加自定义控件工程 如果是创建一个单独的控件,则需要创建一个自定义控件工程,如果已经创建了一个工程,则可以添加自定义控件,下面介绍如何开发一个自定义控件工程。启动Visual Basic,如图16-9所示。在图16-9中,选择“AciveX 控件”,然后单击打开按钮,

11、创建后界面如图16-10所示。 图16-9 创建AcitiveX控件 图16-10 控件界面从图16-10中可以看到,自定义控件的开发界面同普通的Visual Basic应用程序窗体开发一样,因此大部分的Visual Basic自带的控件,都可以被加入到控件容器中。编者手记如果已经创建了一个工程,需要在该工程中添加控件,则可以通过菜单工程 添加用户控件,来添加自定义控件。(2)添加属性和方法为了能够让用户能够使用该控件,总是需要为该控件添加一些属性和方法,下面介绍为控件添加属性和方法。在控件中添加属性主要是通过“Public Property Let”和“Public Property Get

12、”两个方法来实现,下面来看看控件“ucInfo”的“TextFile”属性定义过程。以下两个函数定义了属性TextFile该函数用于设定属性TextFile的值Public Property Let TextFile(ByVal New_TextFile As String) m_TextFile = New_TextFile Call RefreshEnd Property该函数用于获得属性TextFile的值Public Property Get TextFile() As String TextFile = m_TextFile End Property而在控件中定义方法则比较简单,直接

13、通过关键词“Public”定义一个函数或者过程即可,如在“ucToolbar”控件中定义的“BuildToolbar”方法如下:Public Function BuildToolbar(Image As StdPicture, ByVal MaskColor As OLE_COLOR, ByVal IconSize As Integer, Optional ByVal FormatMask As String) As Boolean省略代码End Function因此如果在其他工程中引用了该控件,则可以同使用其他控件一样使用这些定义的属性和方法,如下所示:ucInfo. TextFile=he

14、llomyText= ucInfo. TextFileucToolbar.BuildToolbar(LoadResPicture(BITMAP_TBQUICK, vbResBitmap), &HFF00FF, 16, NNN|NN|OO|NNN|C|NN|NNN|NNN|NN)(3)编译成OCX控件如果是在当前工程中使用该控件,则不需要编译,而如果为了让其他用户或者工程能够方便的使用该工程,则需要将控件编译成OCX控件,编译的过程很简单,选择菜单文件 生成 工程1.OCX,其中“工程1”为创建的自定义控件工程的名称,用户可以通过工程属性修改。2API的应用由于本系统是进行图像处理,众所周知,数

15、字图像一般都比较大,如果使用Visual Basic自带的一些图像控件来进行各种图像处理,则会极大的影响速度。为了加快速度,本系统中了很多的API函数,下面解释一些本系统中比较重要的API函数。 (1)CreateDIBSection函数创建一个存储DIB位的存区域,既可以执行相应的GDI操作,又可以直接通过指向DIB位区域的指针方位DIB位区域。这是一个非常有用的函数,通过它我们可以用DIB替代DDB。Private Declare Function CreateDIBSection Lib gdi32 (ByVal hDC As Long, lpBitsInfo As BITMAPINFO

16、HEADER, ByVal wUsage As Long, lpBits As Long, ByVal handle As Long, ByVal dw As Long) As Long(2)CreateCompatibleDC函数创建一个与特定设备场景一致的存设备场景Private Declare Function CreateCompatibleDC Lib gdi32 (ByVal hDC As Long) As Long(3)CreateCompatibleBitmap函数创建一幅与设备有关位图,它与指定的设备场景兼容Private Declare Function CreateCom

17、patibleBitmap Lib gdi32 (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long(4)DeleteDC函数删除专用设备场景或信息场景,释放所有相关窗口资源。Private Declare Function DeleteDC Lib gdi32 (ByVal hDC As Long) As Long(5)GetObject函数取得对指定对象进行说明的一个结构。windows手册建议用GetObject这个名字来引用该函数。Private Declare Function GetObje

18、ct Lib gdi32 Alias GetObjectA (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long(6)GetObjectType函数判断由指定句柄引用的GDI对象的类型Private Declare Function GetObjectType Lib gdi32 (ByVal hgdiobj As Long) As Long(7)SelectObject函数用于选择对象。每个设备场景都可能有选入其中的图形对象。其中包括位图、刷子、字体、画笔以与区域等等。一次选入设备场景的只能有一个对象。选

19、定的对象会在设备场景的绘图操作中使用。例如,当前选定的画笔决定了在设备场景中描绘的线段颜色与样式。Private Declare Function SelectObject Lib gdi32 (ByVal hDC As Long, ByVal hObject As Long) As Long(8)DeleteObject函数删除GDI对象,比如画笔、刷子、字体、位图、区域以与调色板等等。对象使用的所有系统资源都会被释放。Private Declare Function DeleteObject Lib gdi32 (ByVal hObject As Long) As Long(9)BitBl

20、t函数将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容。Private Declare Function BitBlt Lib gdi32 (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long(10)StretchBlt函数将一幅位图从一个设备场景复

21、制到另一个。源和目标DC相互间必须兼容。这个函数会在设备场景中定义一个目标矩形,并在位图中定义一个源图像。源矩形会根据需要进行伸缩,以便与目标矩形的大小相符。Private Declare Function StretchBlt Lib gdi32 (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidt

22、h As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long(11)SetStretchBltMode函数指定StretchBlt 和 StretchDIBits函数的伸缩模式。这种伸缩模式定义了Windows如何对伸缩过程中剔除的扫描线进行控制。对于VB窗体和控件,倘若在API绘图过程中使用这个函数,建议恢复原来的StretchBlt模式。Private Declare Function SetStretchBltMode Lib gdi32 (ByVal hDC As Long, ByVal nStretchMode A

23、s Long) As Long(12)GetDIBColorTable函数选入设备场景的DIBSection中取得颜色表信息Private Declare Function GetDIBColorTable Lib gdi32 (ByVal hDC As Long, ByVal un1 As Long, ByVal un2 As Long, lpRGBQuad As Any) As Long(13)GetDIBits函数将来自一幅位图的二进制位复制到一幅与设备无关的位图里Private Declare Function GetDIBits Lib gdi32 (ByVal aHDC As Lo

24、ng, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpbi As Any, ByVal wUsage As Long) As Long(14)SetRect函数设置指定矩形的容Private Declare Function SetRect Lib user32 (lpRect As RECT2, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long(15

25、)FillRect函数用指定的刷子填充一个矩形Private Declare Function FillRect Lib user32 (ByVal hDC As Long, lpRect As RECT2, ByVal hBrush As Long) As Long(16)CreateSolidBrush函数用纯色创建一个刷子Private Declare Function CreateSolidBrush Lib gdi32 (ByVal crColor As Long) As Long(17)CreatePalette函数创建调色板 Private Declare Function Cr

26、eatePalette Lib gdi32 (lpLogPalette As Any) As Long(18)GetDC函数获取指定窗口的设备场景Private Declare Function GetDC Lib user32 (ByVal hWnd As Long) As Long(19)GetDesktopWindow函数获得代表整个屏幕的一个窗口(桌面窗口)句Private Declare Function GetDesktopWindow Lib user32 () As Long(20)ReleaseDC函数释放由调用GetDC或GetWindowDC函数获取的指定设备场景。它对类

27、或私有设备场景无效Private Declare Function ReleaseDC Lib user32 (ByVal hWnd As Long, ByVal hDC As Long) As Long(21)OpenClipboard函数打开剪贴板Private Declare Function OpenClipboard Lib user32 (ByVal hWnd As Long) As Long(22)CloseClipboard函数关闭剪贴板 Private Declare Function CloseClipboard Lib user32 () As Long(23)SetCl

28、ipboardData函数设定剪贴板的数据Private Declare Function SetClipboardData Lib user32 (ByVal wFormat As Long, ByVal hMem As Long) As Long(24)EmptyClipboard函数清空剪贴板 Private Declare Function EmptyClipboard Lib user32 () As Long(25)DeleteObject函数删除GDI对象,比如画笔、刷子、字体、位图、区域以与调色板等等。对象使用的所有系统资源都会被释放Private Declare Functi

29、on DeleteObject Lib gdi32 (ByVal hObject As Long) As Long本系统中还使用了其他一些API函数,读者可以参考相关的资料。3常用图像处理原理本系统实现了很多的图像处理的功能,但是每种图像处理都有一定的理论基础,下面介绍一些常用的图像处理的原理。(1)图像的灰度处理图像由彩色转化为灰度的过程叫做灰度化,由于位图为点阵图像,它的每一个像素点有R、G、B三个分量组成,R、G、B的变化可以产生1600多万种颜色,Delphi中灰度化有几种方法可以实现:方法一:求出每一个像素点的R、G、B的平均值,然后把这个平均值赋给该像素点的R、G、B三个分量。方法

30、二:求出每一个像素点R、G、B三个分量的最大值,然后把这个最大值赋给原来像素点的R、G、B三个分量。方法三:根据 YUV的颜色空间,Y分量的物理含义就是亮度,它含了灰度图的所有信息,只用Y分量就完全能够表示出一幅灰度图来。YUV和RGB之间有着如下的对应关系: 利用上式,可以求出:Y0.299R+0587G+0.114B根据R,G,B的值求出Y值后,将R,G,B值都赋值成Y,就能表示出灰度图来,这就是24位真彩色图转灰度图的原理。(2)图像的二值化 图像的二值化的具体办法是:通过设定阈值(Threshold),把灰度图像变换成仅用两个值(0或1)来分别表示的图像目标和图像背景的二值图像,其中目

31、标取值为1,背景值取值为0。实际的位图(Bitmap)中,0对应于RGB值均为0,1对应于RGB值均为255,二值化图像的方法很多,阈值的选择是二值化图像的关键。阈值的选择主要可以分为两类:全局阈值和局部阈值。全局阈值是对整个图像采用一个阈值进行划分,例如固定阈值法二值化、判断分析法二值化、基于灰度差直方图的阈值法等。不同的灰度图像,其灰度深度是存在差异的。同一幅灰度图像,不同部位其明暗分布可能是不同的。因此,在对灰度图像进行二值化的过程中,如果选用全局阈值法显然是不合适的。局部阈值是将图像分成一些子块,对于每一子块选定一个阈值。其中动态阈值法是一个变换方法,即在一个nn的子块中,所有具有灰度级超过平均灰度值到255数据点变换1(即黑色),而另一些低于平均灰度值的数据点则变换到1(即白色)。具体作法如下:图像分为nn的方块,对每一个子块计算其平均灰度值,然后将方块中每个像素点的灰度值与平均灰度值进行比较,若大于平均灰度值,则将该像素点灰度值置为255;反之则置为0。一般采用88的分块大小的动态阈值二值化方法能取得的效果最佳。(3)图像对比度图像对比度是指图像上两点问信号的差异。在一幅灰阶图像上,信号的差异是通过灰度(或亮度)的明暗来体现的,高对比度意思是图像上两个不同观察点一个非常暗,另一个非常亮,而低对比度表示两点的相对亮度差别

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2