基于VC++的圖像處理軟件模塊設(shè)計_第1頁
基于VC++的圖像處理軟件模塊設(shè)計_第2頁
基于VC++的圖像處理軟件模塊設(shè)計_第3頁
基于VC++的圖像處理軟件模塊設(shè)計_第4頁
基于VC++的圖像處理軟件模塊設(shè)計_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、 本科生畢業(yè)論文(設(shè)計)題 目:基于VC+的嵌入網(wǎng)頁圖像處理軟件模塊設(shè)計 姓 名: 學(xué) 院: 工學(xué)院 專 業(yè): 電子信息科學(xué)與技術(shù) 班 級: 信息84 學(xué) 號: 指導(dǎo)教師: 職稱: 2012 年 5月 1 日20目 錄摘要:1關(guān)鍵詞:1Abstract:1Key words:1引言11論文概述11.1課題的研究目的和意義11.2國內(nèi)外發(fā)展?fàn)顩r21.3研究方法與手段31.3.1 運行環(huán)境31.3.2 開發(fā)環(huán)境32圖像處理相關(guān)技術(shù)概述32.1 VC+6.0簡介32.2 VC+各類文件簡介42.3 MFC類庫43.圖像處理軟件的總體設(shè)計53.1 需求分析53.2 圖像處理軟件的目標(biāo)設(shè)計53.3圖像處

2、理系統(tǒng)功能描述54.圖像設(shè)計基礎(chǔ)54.1圖像基礎(chǔ)54.1.1數(shù)字圖像的基本概念54.1.2調(diào)色板64.1.3調(diào)色板的概念74.2 與設(shè)備無關(guān)位圖(DIB)74.2.1 DIB位圖的結(jié)構(gòu)74.2.2 定義DIB處理函數(shù)集84.2.3 CDib類的設(shè)計目標(biāo)115 數(shù)字圖像處理115.1圖像處理的基本方法125.2圖像處理軟件設(shè)計135.2.1設(shè)計步驟和要點135.2.2主界面設(shè)計145.2.3菜單設(shè)計155.2.4工具欄設(shè)計165.3數(shù)字圖像處理結(jié)果166評估與結(jié)論19致謝20參考文獻21基于VC+的嵌入網(wǎng)頁圖像處理軟件模塊設(shè)計電子信息科學(xué)與技術(shù)專業(yè)學(xué)生 指導(dǎo)教師 摘要:隨著計算機技術(shù)和網(wǎng)絡(luò)技術(shù)的

3、快速發(fā)展,社會生產(chǎn)力和精確農(nóng)業(yè)技術(shù)也得到逐步發(fā)展,人們對農(nóng)田除害智能識別技術(shù)的要求也越來越高,因此,需要將機器人技術(shù)計算機技術(shù)網(wǎng)絡(luò)技術(shù)等應(yīng)用于農(nóng)田除害。該課題在windows XP平臺上實現(xiàn),采用Visual C+作為編程工具,采用面向?qū)ο蟮某绦蛟O(shè)計技術(shù)完成一個嵌入網(wǎng)頁的圖像處理(圖像只要指農(nóng)田害蟲)的應(yīng)用軟件。圖形方面主要是設(shè)計圖形基類,以及繼承圖形基類的具體圖形類。此外,通過對獨立功能的封裝,可以為今后需要的圖形圖像的應(yīng)用奠定基礎(chǔ)。系統(tǒng)的優(yōu)點有:充分體現(xiàn)了面向?qū)ο蟮脑O(shè)計思想,充分運用了C+的特性,比如封裝、繼承、多態(tài)。程序結(jié)構(gòu)清晰,可讀性好,程序中做了充分的注釋。關(guān)鍵詞:Visual C+

4、;圖像處理;農(nóng)田害蟲; Based on VC+ image processing software module design of embedded webpageStudent majoring in Electronic and Information Science and Technology Tutor Abstract:With the rapid development computer technology and network technology, the development of social productive forces and the developm

5、ent of precision agriculture technology peoples demand of agricultural pest identification technology more and more high need to robotics technology, computer technology network used in agricultural pesticides. The topic realizes under the windows XP platform, use Visual C+ as a programming tool, us

6、e object-oriented programming techniques to achieve a image processing software. The graph aspect is designs the graph base class , as well as inherits the graph base classs specific graph class. Through independent functions encapsulation, for the futures needs of the graphic images lays the founda

7、tion. The system merit has: the object-oriented designs thought application of the C+ properties, for example encapsulation, polymorphism, and inheritance. Programs structure is clear, good readability, codes has the full annotation in the program. The graph plans part has avoided complicated struct

8、ure of the traditional switch case. Easy expansion and transplantation.Key words: Visual C+;image processing;Agricultural pest;引言 數(shù)字圖像處理( Digital Image Processing) 是指將圖像信號轉(zhuǎn)換成數(shù)字信號并利用計算機對其進行處理的過程。圖像處理中, 輸入的是質(zhì)量低的圖像, 輸出的是改善質(zhì)量后的圖像, 圖像處理的方法多種多樣, 一般可分為圖像變換、圖像增強和復(fù)原、圖像分割、圖像壓縮編碼、圖像描述和圖像識別等幾類。目前,圖像處理的應(yīng)用領(lǐng)域已涉及到人

9、們工作生活中的方方面面。 1論文概述1.1課題的研究目的和意義本文所介紹的數(shù)字圖像處理系統(tǒng)是一款簡單而又實用的灰度級圖像處理軟件, 是基于Windows 平臺 的應(yīng)用程序,利用Visual C+ + 6. 0 的編譯環(huán)境提高了系統(tǒng)的開發(fā)速度,實現(xiàn)數(shù)字圖像的查看與編輯操作1。應(yīng)該說,目前已有種類繁多的圖形圖像處理專用軟件工具,如AutoCAD、和PhotoShop等,利用這些圖形圖像處理軟件可以實現(xiàn)同樣的功能。即便如此,研究這些圖形圖像處理技術(shù)仍具有一定使用價值。首先,利用一個設(shè)計良好的簡單的小圖形處理程序可以用于教學(xué)演示的目的,展示基本的圖形圖像處理技術(shù)和面向?qū)ο蠹夹g(shù)在這一領(lǐng)域的應(yīng)用效果。其次

10、,在很多應(yīng)用中需要提供自己的圖形圖像處理功能,例如,在一個正在連接網(wǎng)絡(luò)的任務(wù)中可能就希望顯示一幅示意性的動畫,此時,不能依賴一個圖形軟件來實現(xiàn)。因此,通過對獨立功能的封裝,可以為今后需要的圖形圖像的應(yīng)用奠定基礎(chǔ)2。此外,借助Visual C+語言這種典型的面向?qū)ο缶幊汰h(huán)境,能夠充分挖掘硬件的潛能,得到性能優(yōu)良的程序代碼。1.2國內(nèi)外發(fā)展?fàn)顩r數(shù)字圖像處理(DigitalImageProcessing)是通過計算機對圖像進行去除噪聲、增強、復(fù)原、分割、提取特征等處理的方法和技術(shù)。數(shù)字圖像處理的產(chǎn)生和迅速發(fā)展主要受三個因素的影響:一是計算機的發(fā)展;二是數(shù)學(xué)的發(fā)展(特別是離散數(shù)學(xué)理論的創(chuàng)立和完善);三

11、是廣泛的農(nóng)牧業(yè)、林業(yè)、環(huán)境、軍事、工業(yè)和醫(yī)學(xué)等方面的應(yīng)用需求的增長。20世紀(jì)20年代,圖像處理首次應(yīng)用于改善倫敦和紐約之間海底電纜發(fā)送的圖片質(zhì)量。到20世紀(jì)50年代,數(shù)字計算機發(fā)展到一定的水平后,數(shù)字圖像處理才真正引起人們的興趣。1964年美國噴氣推進實驗室用計算機對“徘徊者七號”太空船發(fā)回的大批月球照片進行處理,收到明顯的效果。20世紀(jì)60年代末,數(shù)字圖像處理具備了比較完整的體系,形成了一門新興的學(xué)科。20世紀(jì)70年代,數(shù)字圖像處理技術(shù)得到迅猛的發(fā)展,理論和方法進一步完善,應(yīng)用范圍更加廣泛。在這一時期,圖像處理主要和模式識別及圖像理解系統(tǒng)的研究相聯(lián)系,如文字識別、醫(yī)學(xué)圖像處理、遙感圖像的處理

12、等。20世紀(jì)70年代后期到現(xiàn)在,各個應(yīng)用領(lǐng)域?qū)?shù)字圖像處理提出越來越高的要求,促進了這門學(xué)科向更高級的方向發(fā)展。特別是在景物理解和計算機視覺(即機器視覺)方面,圖像處理已由二維處理發(fā)展到三維理解或解釋。近年來,隨著計算機和其它各有關(guān)領(lǐng)域的迅速發(fā)展,例如在圖像表現(xiàn)、科學(xué)計算可視化、多媒體計算技術(shù)等方面的發(fā)展,數(shù)字圖像處理已從一個專門的研究領(lǐng)域變成了科學(xué)研究和人機界面中的一種普遍應(yīng)用的工具。圖形與圖像處理是計算機最早應(yīng)用的領(lǐng)域之一,從簡單的圖形顯示到復(fù)雜的圖像分析、模式識別,使得圖形與圖像處理技術(shù)不斷走向成熟,國內(nèi)外也涌現(xiàn)出了大量的軟件。例如,ACDSee、PhotoShop、CorelDraw等

13、,這些軟件提供了一般顯示、特殊顯示、特技處理等大量復(fù)雜的功能。圖形處理技術(shù)得益于圖形學(xué)的發(fā)展,而從目的上可以將圖像處理技術(shù)分為兩類,分別是圖像識別技術(shù)和圖像處理技術(shù)。針對圖像處理技術(shù),可以是旋轉(zhuǎn)、亮度、對比度、飽和度、RGB調(diào)節(jié)、調(diào)節(jié)圖像尺寸等屬性方面的處理技術(shù)和添加文字、圖像增強、弱化、水印、特效、鏤空等處理方法。甚至為了達到更精微的處理效果,這些軟件還使用了圖層。隨著網(wǎng)絡(luò)和多媒體技術(shù)的發(fā)展和應(yīng)用,體現(xiàn)在應(yīng)用軟件中的是一些更具有“現(xiàn)代感”的應(yīng)用,例如,支持各種常用圖形、RAW原始圖片、Flash動畫的快速瀏覽、編輯、保存、導(dǎo)入、導(dǎo)出,甚至還可以提供一些趣味涂鴉、字符素描之類的應(yīng)用,以體現(xiàn)人的

14、個性3。事實上,應(yīng)用軟件中常常需要采用其中的某些技術(shù)來處理相關(guān)的問題。例如,一個支持簡單形狀輔助設(shè)計的軟件并不需要支持特效方面的方法。在軟件設(shè)計的支撐環(huán)境和技術(shù)上,C+是一個很好的選擇,這主要是考慮到如下因素,主要包括代碼效率高,處理底層問題能力強,支持面向?qū)ο蟮某绦蛟O(shè)計方法。利用C+技術(shù)可以實現(xiàn)對程序代碼和數(shù)據(jù)的良好封裝,使之能夠具有良好的重用性。1.3研究方法與手段1.3.1 運行環(huán)境運行環(huán)境主要介紹了硬件環(huán)境和軟件環(huán)境。(1) 硬件環(huán)境 處理器:Inter Pentium 166 MX 或更高 內(nèi)存:32MB或更高 硬盤空間:1GB或更高 顯卡:SVGA顯示適配器(2) 軟件環(huán)境操作系統(tǒng)

15、:Window 98/ME/2000/XP1.3.2 開發(fā)環(huán)境開發(fā)環(huán)境主要介紹了本系統(tǒng)采用的操作系統(tǒng)、開發(fā)語言。(1) 操作系統(tǒng):Windows XP(2) 開發(fā)語言:C+(3) 開發(fā)環(huán)境:Visual C+ 6.02圖像處理相關(guān)技術(shù)概述2.1 VC+6.0簡介面向?qū)ο蟪绦蛟O(shè)計(Object-Oriented Programming,簡稱OOP)方法已出現(xiàn)近30年,在20世紀(jì)90年代己成為程序設(shè)計的主流方向。面向?qū)ο蟪绦蛟O(shè)計語言是現(xiàn)代程序開發(fā)的主要工具。程序包含兩類基本的元素,即數(shù)據(jù)和操作數(shù)據(jù)的指令集(稱為代碼)。傳統(tǒng)的程序設(shè)計語言以設(shè)計代碼為核心,程序設(shè)計實際上就是指定程序指令的先后次序,數(shù)

16、據(jù)表示必須適應(yīng)代碼的設(shè)計。模塊化程序設(shè)計方法將完成某一功能的指令集組成一個相對獨立的程序模塊(即函數(shù)或過程),使得程序的結(jié)構(gòu)清晰,便于有效的維護,對程序設(shè)計技術(shù)有很大的促進。但由于結(jié)構(gòu)化程序設(shè)計方法并不能保證各程序模塊之間真正的相互獨立,程序設(shè)計者在設(shè)計一個模塊時很難完全排除其他模塊的影響。隨著程序規(guī)模的增大,各模塊之間的相互影響導(dǎo)致一些難于測試,難以定位發(fā)現(xiàn)的錯誤,增加了程序開發(fā)和維護的困難。面向?qū)ο蟪绦蛟O(shè)計方法主要以數(shù)據(jù)為中心,代碼是圍繞著需要處理的數(shù)據(jù)而設(shè)計的4。VC+6.0是Microsoft公司推出的一個基于Windows系統(tǒng)平臺、可視化的集成開發(fā)環(huán)境,它的源程序按C+語言的要求編寫

17、,并加入了微軟提供的功能強大的MFC(Microsoft Foundation Class)類庫。MFC中封裝了大部分Windows API函數(shù)和Windows控件,它包含的功能涉及到整個Windows操作系統(tǒng)。MFC不僅給用戶提供了Windows圖形環(huán)境下應(yīng)用程序的框架,而且還提供了創(chuàng)建應(yīng)用程序的組件,這樣,開發(fā)人員不必從頭設(shè)計創(chuàng)建和管理一個標(biāo)準(zhǔn)Windows應(yīng)用程序所需的程序,而是從一個比較高的起點編程,故節(jié)省了大量的時間。另外,它提供了大量的代碼,指導(dǎo)用戶編程時實現(xiàn)某些技術(shù)和功能。因此,使用VC+提供的高度可視化的應(yīng)用程序開發(fā)工具和MFC類庫,可使應(yīng)用程序開發(fā)變得簡單5。2.2 VC+各

18、類文件簡介.dsw文件這種類型的文件在VC中級別是最高的,成為Workspace文件。在Workspace文件中可以包含多個Project,由Workspace文件對它們進行統(tǒng)一的協(xié)調(diào)和管理。.dsp文件以dsp為擴展名的文件中存放的是一個特定的工程,也就是特定的應(yīng)用程序的有關(guān)信息,每個工程都對應(yīng)有一個dsp類型的文件。.clw文件以clw為擴展名的文件是用來存放應(yīng)用程序中用到的類和資源的信息的,這些信息是VC中的ClassWizard工具管理和使用類的信息來源。readme.txt文件對應(yīng)每個應(yīng)用程序有一個readme.txt文件,這個文件中列出了應(yīng)用程序中用到的所有的文件信息,打開并查看其

19、中的內(nèi)容就可以對應(yīng)用程序的文件結(jié)構(gòu)有一個基本的認(rèn)識。.h和.cpp文件在應(yīng)用程序中大量應(yīng)用的是以h和cpp為擴展名的文件,以h為擴展名的文件稱為頭文件;以cpp為擴展名的文件稱為實現(xiàn)文件,一般說來h為擴展名的文件與以cpp為擴展名的文件是一一對應(yīng)配合使用的,在h為擴展名的文件中包含的主要是類的定義,而在cpp為擴展名的文件中包含的主要是類成員函數(shù)的實現(xiàn)代碼。.rc文件VC中以rc為擴展名的文件稱為資源文件,其中包含了應(yīng)用程序中用到的所有的windows資源,需要注意的是rc文件可以直接在VC集成環(huán)境中以可視化的方法進行編輯和修改6。2.3 MFC類庫MFC,微軟基礎(chǔ)類(Microsoft Fo

20、undation Classes),實際上是微軟提供的,用于在C+環(huán)境下編寫應(yīng)用程序的一個框架和引擎,VC+是Windows下開發(fā)人員使用的專業(yè)C+ SDK(SDK,Standard SoftWare Develop Kit,專業(yè)軟件開發(fā)平臺),MFC就是掛在它之上的一個輔助軟件開發(fā)包,MFC作為與VC+血肉相連的部分。微軟基礎(chǔ)類庫由兩部分組成:一是通常所說的C+類庫,是MFC類庫的主體部分,這些類構(gòu)成了MFC應(yīng)用程序框架。二是MFC預(yù)定義宏、全局變量和全局函數(shù),是MFC類庫的輔助部分,它們都是MFC進行Windows應(yīng)用程序開發(fā)不可缺少的組成部分。MFC使得開發(fā)windows應(yīng)用程序比以往任

21、何時候都要容易,雖然我們要編寫的應(yīng)用程序在功能上千差萬別,但是從本質(zhì)上來講,都可以劃歸為用戶界面的設(shè)計,對文件的操作,多媒體的使用,數(shù)據(jù)庫的訪問等一些最主要的方面。這一點正是微軟提供MFC類庫最重要的原因,在這個類庫中的某個對象能完成所需要的功能,這時我們只要簡單地調(diào)用已有對象派生出我們自己的對象,這時派生出來的對象除了具有類庫中的對象的特性和功能之外,還可以由我們自己根據(jù)需要加上所需的特性和方法,并根據(jù)需要來不斷完善對象的功能。正是由于MFC編程方法充分利用了面向?qū)ο蠹夹g(shù)的優(yōu)點,它使得我們編程時極少需要關(guān)心對象方法的實現(xiàn)細節(jié),同時類庫中的各種對象的強大的功能足以完成我們程序中的絕大部分所需的

22、功能,這使得應(yīng)用程序中程序員所需要編寫的代碼大為減少,有力地保證了程序的良好的可調(diào)試性。需要指出的是MFC類庫在提供的對象的各種屬性和方法都是經(jīng)過謹(jǐn)慎的編寫和嚴(yán)格的測試,可靠性很高,這就保證了使用MFC類庫不會影響程序的可靠性和正確性。3.圖像設(shè)計基礎(chǔ)3.1圖像基礎(chǔ)3.1.1數(shù)字圖像的基本概念人眼看到的任何自然界的圖像都是連續(xù)的模擬圖像,其形狀和形態(tài)表現(xiàn)由圖像各位置的顏色所決定。色度學(xué)理論認(rèn)為,任何顏色都可由紅(Red)、綠(Green)、藍(Blue)3種基本顏色按不同的比例混合得到。紅、綠、藍被稱為三原色,簡稱RGB三原色。因此,自然界的圖像可用基于位置坐標(biāo)的三維函數(shù)來表示,即 f(x,y

23、,z)=(fred(x,y,z),fgreen(x,y,z),fblue(x,y,z) (3-1)其中f表示空間坐標(biāo)為(x,y,z)位置點的顏色,fred、fgreen、fblue分別表示該位置點的紅、綠、藍3種原色的顏色分量值。它們都是空間的連續(xù)函數(shù),即連續(xù)空間的每點都由一個精確的值與之相對應(yīng)。為了研究的方便,主要考慮平面圖像。平面上每一點僅包括兩個坐標(biāo)值。因此,平面圖像函數(shù)是連續(xù)的二維的數(shù),即 f(x,y)=(fred(x,y),fgreen(x,y),fblue(x,y) (3-2)圖像可以分為黑白圖像和彩色圖像。所謂黑白圖像,就是圖像中每一點都不是彩色的,即每點的紅、綠、藍顏色分量值都

24、相等,即 fred=fgreen=fblue (3-3)對于黑白圖像,其f(x,y)表示(x,y)位置處的灰度值。由于計算機僅能處理離散的數(shù)據(jù),所以如要用計算機來處理圖像,連續(xù)的圖像函數(shù)必須轉(zhuǎn)化為離散的數(shù)據(jù)集,這一過程叫做圖像采集7。圖像采集由圖像采集系統(tǒng)完成,如圖3-1所示。圖像采集系統(tǒng)包括3個基本單元,即成像系統(tǒng)、采樣系統(tǒng)和量化器。成像系統(tǒng)f(x,y)g(x,y)量化器gs(x,y)ga(x,y)景物圖像采樣圖像數(shù)字圖像采樣系統(tǒng)圖3-1 圖像采集系統(tǒng)3.1.2調(diào)色板現(xiàn)實世界的顏色種類是無限的,但計算機顯示系統(tǒng)所能表現(xiàn)的顏色數(shù)量是有限的。因此,為了使計算機能最好地重現(xiàn)實際圖景,就必須采用一定

25、的技術(shù)來管理和取舍顏色。按表現(xiàn)能力的不同,現(xiàn)代計算機的顯示系統(tǒng)可以分為以下3種。(1) VGA:能用640480的分辨率同時顯示16種顏色。(2) SuperVGA:能用640480的分辨率同時顯示256種顏色(3) 真彩色:能同時顯示16777216種顏色。所謂真彩色(True Color),是指顯示出來的圖像的顏色與真實世界中的顏色非常自然逼真、人眼難以區(qū)分它們的差別。通常使用RGB表示法來表現(xiàn)真彩色圖像,即用3字節(jié)(24位)來表示個真彩色像素的顏色值,紅、綠、藍三原色的濃度分別用一字節(jié)(8位)來表示。Windows采用該方法來表現(xiàn)顏色,其SDK提供一個名為RGB的宏來將不同的R、G、B顏

26、色值轉(zhuǎn)化為24位的顏色值,其原型如下所示。 COLORREF RGB(BYTE bRed, BYTE bGReen, BYTE bBlue) (3-4)COLORREF是表示顏色值的數(shù)據(jù)類型,是一個32位的無符號長整數(shù);bRed、bGreen和bBlue分別表示紅、綠、藍三原色的濃度,它們的類型是BYTE,長度是8位。其十六進制數(shù)據(jù)表示形式如下所示。 0x00bbggrr (3-5)字節(jié)rr、gg、bb比分別表示紅、綠、藍三原色的濃度,最高位字節(jié)為0,用于保留與將來的系統(tǒng)兼容8。3.1.3調(diào)色板的概念在真彩色系統(tǒng)中,每一個像素的值都用24位來表示。像素值與真彩色顏色值可以一一對應(yīng),所以像素值就

27、是所表現(xiàn)的顏色位。但對于僅能同時顯示16色或256色的系統(tǒng),每一個像素僅能分別采用4位或8位來表示,像素值與真彩色顏色值不能一一對應(yīng),用像素值代表顏色值的方法將不能得到最佳的效果,而必須采用調(diào)色板技術(shù)。所謂調(diào)色板就是在16色或256色顯示系統(tǒng)中,由圖像中出現(xiàn)最頻繁的16種或256種顏色所組成的顏色表。對這些顏色按4位或8位,即0至15或255進行編號,每一編號代表其中的一種顏色。這種顏色編號叫做顏色的索引號,4位或8位的索引號與24位的顏色值的對應(yīng)表叫做顏色查找表。使用調(diào)色板的圖像叫做調(diào)色板圖像。它們的像素值并不是顏色值,而是顏色在調(diào)色板查找表中的索引號9。為了保證Windows的基本顯示界面

28、的一致性,Windows保留了一個有20種顏色的內(nèi)部系統(tǒng)調(diào)色板,用來繪制窗口的圖標(biāo)、邊界和按鈕等通用界面。該調(diào)色板在所有的顯示設(shè)置中都保持不變。在16色的顯示系統(tǒng)中,系統(tǒng)調(diào)色板通過16種顏色的抖動來產(chǎn)生其余4種顏色。在256色的顯示系統(tǒng)中,Windows也保持該20種顏色的次序,其余的236種顏色由當(dāng)前的調(diào)色板分配10。3.2 與設(shè)備無關(guān)位圖(DIB)Windows3.1以上版本提供了對設(shè)備無關(guān)位圖DIB的支持。DIB位圖可以在不同的機器或系統(tǒng)中顯示位圖所固有的圖像。與DDB相比而言,DIB是一種外部的位圖格式,經(jīng)常存儲為以.BMP為后綴的位圖文件(有時也以DIB為后綴)。DIB位圖還支持圖像

29、數(shù)據(jù)的壓縮11。大多數(shù)圖像處理都是基于與設(shè)備無關(guān)位圖(DIB)來進行討論的,而MFC中沒有處理DIB位圖的類,這就給編程帶來了很大困難。所以需要建立一個處理DIB位圖的專用類,CDIB類,在其中封裝必要而有效的處理函數(shù)。3.2.1 DIB位圖的結(jié)構(gòu)DIB位圖文件的結(jié)構(gòu)如圖3-2所示,包括位圖文件頭結(jié)構(gòu)BITMAPEHEADER、位圖信息頭結(jié)構(gòu)BITMAPINFOHEADER、位圖顏色表RGBQUAD和位圖像素數(shù)據(jù)4部分。位圖文件頭結(jié)構(gòu)BITMAPEHEADER位圖信息頭結(jié)構(gòu)BITMAPINFOHEADER位圖顏色表RGBQUAD位圖像素數(shù)據(jù)圖3-2 DIB位圖的結(jié)構(gòu)上面結(jié)構(gòu)中各數(shù)據(jù)域的意義如表

30、3-1所示。 表3-1 Windows位圖結(jié)構(gòu)數(shù)據(jù)域的含義 結(jié) 構(gòu)數(shù) 據(jù) 域含 義BITMAPFILEHEADERBftype字節(jié)“BM”bfSize文件總字節(jié)數(shù)bfResrved10bfResrved20bfOffBits位圖數(shù)據(jù)距文件頭的偏移量BITMAPINFOHEADERbiSize本結(jié)構(gòu)大小的字節(jié)數(shù)biWidth位圖的寬度,單位為像素點biHeight位圖的高度,單位為像素點biPlanes1bitBitCount像素的位數(shù)(1,4,8,24)biCompression壓縮方式(0表示不壓縮)biSizeImage位圖數(shù)據(jù)的字節(jié)數(shù)biXpelsPerMeter水平分辨(像素點每米)b

31、iYpelsPerMeter垂直分辨(像素點每米)biClrUsed圖像中使用的顏色數(shù)biClrImportant圖像中重要的顏色數(shù)RGBQUADrgbBlue藍色的比例rgbGreen綠色的比例rgbRed紅色的比例rgbReserved0DIB位圖像素的位數(shù)可為1、4、8和24,其圖像的顏色數(shù)分別為2、16、256和真彩色其中前3種具有對應(yīng)的顏色表,而24位位圖的顏色表為空,其像素值就是顏色值12。3.2.2 定義DIB處理函數(shù)集由于DIB位圖能獨立地保存固有的圖像處理信息,能在不同的系統(tǒng)中重顯其圖像,因此成為Windows環(huán)境中的基本圖像格式。由于MFC中沒有涉及處理DIB位圖的類,因此

32、,利用Visual C+進行DIB位圖編程時只能使用“非面向?qū)ο蟆?,即直接調(diào)用Win32 SDK的有關(guān)API函數(shù)。因此,我們要定義一個處理DIB位圖的專用類,比如一個名為CDib的類,在其中封裝必需而且有效的DIB數(shù)據(jù)成員和處理函數(shù)。但是,在構(gòu)思這樣一個類時,會遇到許多困難。因為,即使是Win32 SDK也沒有為我們提供多少可以直接處理DIB位圖的API函數(shù)。因此,為了實現(xiàn)這樣的類,就必須先設(shè)計好一套處理DIB位圖的完整函數(shù)集,這將是實現(xiàn)CDib類函數(shù)時,調(diào)用該函數(shù)集,也將使類的代碼更簡練。MFC的類實現(xiàn)也是以Win32 SDK API函數(shù)為基礎(chǔ)的,因此在設(shè)計CDib類時,首先要設(shè)計一套對應(yīng)的

33、函數(shù)集。定義的DIB處理函數(shù)如表3-2所示。表3-2 DIB處理函數(shù)集函數(shù)類型函 數(shù) 名功 能初始化函數(shù)CreateDIB 創(chuàng)建一個空的DIBCreateDefaultDIB 用當(dāng)前的系統(tǒng)調(diào)色板創(chuàng)建一個空的DIBDestroryDIB 釋放DIB內(nèi)存塊LoadDIB 從DIB文件中裝載DIB數(shù)據(jù)SaveDIB 讀DIB存到文件中ReadDIBFile 讀DIB存到內(nèi)存中BytesPerLine 獲取DIB每行所占的字節(jié)數(shù)DIBlockSize 獲取DIB數(shù)據(jù)塊的大小DIBHeight 獲取DIB高度DIBWidth 獲取DIB寬度DIBNumColors 獲取DIB的顏色數(shù)DIBBitCout

34、 獲取DIB的圖像顏色位數(shù)FindDIB Bits 獲取DIB數(shù)據(jù)塊的地址(指針)PletteSize 獲取DIB的調(diào)色板中的顏色表項數(shù)PaintBitmap 顯示DDBPaintDIB 顯示DIBPaintDIB 顯示DIBDIBToDIBSetion 將DIB數(shù)據(jù)塊轉(zhuǎn)換為DIBSECTIONDIBSectionToDIB 將DIBSECTION轉(zhuǎn)換為DIB數(shù)據(jù)塊ConvertDIBFormat 修改的格式BitmapToDIB 將DDB轉(zhuǎn)換為DIBChangeBitmapFormat 修改DDB的格式DIBToBitmap 將DDB轉(zhuǎn)換為DIBChangeDIBFormat 基于當(dāng)前的系統(tǒng)

35、調(diào)色板修改DIBCreateDIBPalette 創(chuàng)建DIB調(diào)色板DisplayPalette 顯示調(diào)色板CopyPalette 拷貝調(diào)色板GetSystemPalette 獲取當(dāng)前的系統(tǒng)調(diào)色板PalEntriesOnDevice 獲取設(shè)備的調(diào)色板表項數(shù)CreateIdentifyPalette創(chuàng)建等同調(diào)色板MapDIBColorsToPalette按指定的調(diào)色板映射DIB的顏色CopyScreenToBitmap 將屏幕顯示轉(zhuǎn)換為一個DDBCopyWindowToBitmap 將指定窗口的顯示轉(zhuǎn)換為一個DDBCopyClientRectToBitmap將指定窗口用戶區(qū)的指定區(qū)域顯示轉(zhuǎn)換Cop

36、yScreenToDIB 為一個DDB CopyWindowToDIB 將指定窗口的顯示轉(zhuǎn)換為一個DIB屬性函數(shù)顯示函數(shù)操作函數(shù)調(diào)色板函數(shù)捕獲函數(shù)為了使用方便,將上述函數(shù)的聲明及相關(guān)的常量、宏及數(shù)據(jù)類型定義放在文件DIBAPI.H中,而將所有函數(shù)的代碼放在文件DIBAPI.CPP中。3.2.3 CDib類的設(shè)計目標(biāo)3.2.3.1功能實現(xiàn)圖像處理的基礎(chǔ)是設(shè)計一個解釋位圖的DIB類(名CDib),基本功能如下所述。(1) 多種形式的構(gòu)造函數(shù),包括創(chuàng)建空DIB、從DDB創(chuàng)建、從DIB句柄創(chuàng)建、從DIB數(shù)據(jù)塊指針創(chuàng)建及從屏幕或窗口顯示創(chuàng)建等;(2) 支持拷貝構(gòu)造函數(shù)和賦值運算;(3) DIB文件的讀、

37、寫操作;(4) 從資源中裝載DIB位圖;(5) DIB的顯示;(6) 提供DIB的空間、顏色和格式特征等信息;(7) DDB與DIB的相互轉(zhuǎn)換;(8) DIB格式轉(zhuǎn)換;(9)IB調(diào)色板操作;(10) 能獲取DIB位圖數(shù)據(jù)的句柄;(11) 能生成DIB數(shù)據(jù)的拷貝。3.2.3.2父類由于MFC中已有一個支持DDB操作的CBitmap類,因此,很直觀的想法是,以CBitmap類為父類派生出的CDib類。但是,從長遠考慮,這樣做并沒有什么好處。首先,CBitmap類是為DDB的操作而設(shè)計的,其中沒有處理DIB的功能,因此CDib類不能從中繼承任何可用的功能。其次,CBitmap類是從CGdiobjec

38、t中派生來的,CBitmap類以及它從CGdiobject類繼承來的數(shù)據(jù)成員和功能函數(shù)對CDib類來說都是不合適的,也是多余的。此外,CBitmap類沒有提供有效的文件操作機制。而DIB主要是一種“外部”位圖,即它主要以文件形式進行存儲和交換,所以CDib類應(yīng)該能很好的處理文件操作。MFC中的CObject類是MFC中其他大多數(shù)類的根類和基類。它不但提供許多有用的特性,還包括對文件串行化的支持,運行時類信息和對象診斷的輸出等。如果從CObject類派生類,則可繼承該類的這些特性。另外,CObject類具有最低限度的成員數(shù)據(jù)和函數(shù),從CObject類派生類所付出的代價是最低的。因此,采用CObj

39、ect類作為CDib類的父類是很合理的。從CObject類派生一個類時,可以從如下4個層次的功能中進行選擇。(1) 基本功能:不支持運行時的類信息和串行化,但包含內(nèi)存診斷處理;(2) 基本功能加上對運行時的類信息的支持;(3) 基本功能加上對運行時的類信息和動態(tài)創(chuàng)建的支持;(4) 基本功能加上對運行時的類信息、動態(tài)創(chuàng)建和串行化的支持;CObject類的派生類利用幾個宏來實現(xiàn)對上述功能的支持,如表3-3所示。表3-3 用于支持運行時的類信息和串行化宏支持運行時的類型信息(CObject:IsKindof)動態(tài)創(chuàng)建(CrunTimeClass:CreateObject)串行化(Carchive:O

40、perator Carchive:Operator)基本CObject功能NoNoNoDECLARE_DYNAMICYesNoNoDECLARE_DYNCREATEYesYesNoDECLARE_SERIALYesYesYes由于文件操作對DIB來說很重要的,所以串行化操作是CDib類必須從CObject中繼承下來的特性。串行化指在文件中讀寫對象的過程,MFC把CArchive類的對象作為要串行化的對象和存儲媒體之間的橋梁。CArchive類對象用重載的插入操作符()來執(zhí)行讀寫操作。要在類中支持串行化,需要在定義類時做如下操作:(1) 以CObject類為父類來派生類;(2) 覆蓋CObjec

41、t類的虛函數(shù)Serialize;(3) 在類的說明使用DECLARE_SERIAL宏;(4) 定義一個不帶參數(shù)的構(gòu)造函數(shù);(5) 在類的實現(xiàn)文件中IMPLEMENT_SERIAL宏。3.2.3.3數(shù)據(jù)封裝面向?qū)ο蠓椒ǖ囊粋€重要特征就是數(shù)據(jù)封裝。即將類的成員數(shù)據(jù)隱藏在類中,外界只能通過類的成員函數(shù)來操作類的成員數(shù)據(jù)。這是面對對象方法的重要有點,它可以保護類中的數(shù)據(jù)不受外部的意外修改。但是,過分“純粹”的數(shù)據(jù)封裝,需要付出降低程序效率的代價。特別是在設(shè)計像CDib這樣需要大量使用Win32 API函數(shù)的類時,這種缺陷特別突出。因為操作DIB的API函數(shù)大多需要一些DIB的屬性作為參數(shù)。如果硬要將這

42、些屬性封裝起來,則需要在類中重新實現(xiàn)許多Win32 API函數(shù)。這不但要花費很大的精力,而且還可能因此而產(chǎn)生錯誤和低效。所以,在設(shè)計CDib時應(yīng)采用既盡可能保證數(shù)據(jù)非封裝,又能保證效率的提高。3.2.3.4繼承CDib類的另一個設(shè)計目標(biāo)應(yīng)該考慮到,今后可能需要從CDib類中派生子類,即注意其可繼承性。通過將有關(guān)的成員函數(shù)定義為虛函數(shù),可以保證在派生類中重載它們,以支持繼承中的多樣性。4 數(shù)字圖像處理圖像處理就是用一系列特定操作來改變圖像的像素,以達到特定的目標(biāo),比如使圖像跟清晰,或從圖像中提取某些特定的信息等。數(shù)字圖像處理是現(xiàn)代圖像處理的主要方法,具有再現(xiàn)性好,精度高,適用面廣和靈活性大的優(yōu)點

43、。數(shù)字圖像處理由數(shù)字處理系統(tǒng)完成,其結(jié)構(gòu)如圖4-1所示。它主要包括圖像采集系統(tǒng)、計算機圖像處理系統(tǒng)和圖像輸出系統(tǒng)3部分。圖4-1 圖像處理系統(tǒng)計算機圖像處理系統(tǒng)由計算機軟硬件系統(tǒng)組成。計算機圖像處理的軟件系統(tǒng)是基于數(shù)字圖像處理的理論和算法而設(shè)計的一系列程序,用以實現(xiàn)圖像的增強、變換、變形、壓縮和彩色處理等操作。數(shù)字圖像處理的內(nèi)容非常豐富,是現(xiàn)代計算機的重要應(yīng)用方向,從功能上可以將數(shù)字圖像處理劃分為3大類,如圖4-2所示。圖4-2 數(shù)字圖像處理功能劃分從圖像處理對圖像像素的處理方式上可以劃分為點處理和區(qū)域處理兩種。點處理是一種輸出像素值僅取決于輸入像素值的圖像處理方法;區(qū)域處理的輸出像素值不僅與

44、輸入像素值有關(guān),而且與輸入像素在一定范圍內(nèi)的相鄰像素值有關(guān)。4.1圖像處理的基本方法基本的圖像處理方法可分為點處理和區(qū)域處理兩類。點處理相對較簡單,只能改變圖像的灰度分布,但不會改變圖像內(nèi)的空間關(guān)系。點處理可以按預(yù)定的方式改變圖像的灰度直方圖。最常用的點處理是灰度直方圖均衡。區(qū)域處理在處理某一像素時,利用與該像素相鄰的一組像素,經(jīng)過某種變換得到處理后圖像中某一點的像素值。目標(biāo)像素的鄰域一般是由像素組成的二維矩陣,該矩陣的大小為奇數(shù)。目標(biāo)像素位于該矩陣的中央,即目標(biāo)像素就是區(qū)域的中心像素。經(jīng)過處理后,目標(biāo)像素的值為經(jīng)過特定算法計算后所得的結(jié)果。區(qū)域中心像素周圍的那些像素值在二維方向上提供了圖像的

45、亮度變化趨勢的信息。圖像中像素的亮度在一定距離上的變化速率稱為圖像的空間頻率。區(qū)域處理將改變圖像的空間頻率信息,減緩或增強圖像中的某些特定的頻率分量13。主要的區(qū)域處理算法有卷積法、中值濾波法和Sobel邊緣檢測法。我們這里只介紹卷積法。(1) 卷積原理卷積可以簡單地看成加權(quán)求和的過程。卷積時使用的權(quán)用一個很小的矩陣來表示,矩陣的大小是奇數(shù),而且與使用的區(qū)域的大小相同。這種權(quán)矩陣叫做卷積核,區(qū)域中的每個像素分別與卷積核中的每個元素相乘,所有乘積之和即為區(qū)域中心像素的新值。卷積核中各元素叫做卷積系數(shù)。卷積核中卷積系數(shù)的大小、方向及排列次序決定了卷積的圖像處理效果。大多數(shù)常用的卷積核都是33的,所

46、有卷積核的行、列數(shù)都是奇數(shù)14。(2) 低通濾波:圖像平滑與模糊低通濾波的基本思路是保留圖像空間頻率的低頻成分,減少圖像的高頻成分。低通濾波可以降低圖像中的視覺噪聲,同時除去圖像中的高頻部分后,圖像中那些本來不明顯的低頻成分就更容易識別了15。(3) 高通濾波:圖像銳化與清晰高通濾波增強圖像的高頻空間頻率成分,阻擋低頻中間頻率成分。相對于高頻成分來說,低頻成分被削弱了。在需要突出圖像中的高頻成分時,可對圖像進行高通濾波。(4) 平滑與銳化對圖像進行低通濾波將使圖像平滑;而對圖像進行高通濾波將使圖像銳化。因此圖像的平滑與銳化處理實際上就是對圖像進行低、高通濾波,即用低、高通濾波器作為卷積核來對圖

47、像進行卷積處理。(5) 圖像描述的形態(tài)學(xué)方法“形態(tài)學(xué)”是描述動植物形態(tài)和結(jié)構(gòu)的一門生物學(xué)分支,這里借用來指一種圖像處理的方法。圖像處理的形態(tài)學(xué)方法是一種“數(shù)學(xué)形態(tài)學(xué)”方法,用來提取圖像成分,并據(jù)此來對圖像區(qū)域的形狀進行表示和描述。數(shù)學(xué)形態(tài)學(xué)的數(shù)學(xué)語言是集合理論,其中的集合代表圖像中物體的形狀。圖像處理中常用的數(shù)學(xué)形態(tài)學(xué)方法包括腐蝕、膨脹、開、閉、邊緣提取和圖像細化等。4.2圖像處理軟件設(shè)計4.2.1設(shè)計步驟和要點用Visual C+編制ImageProcess的步驟和要點如下:(1)使用AppWizard生成一個基于多文檔的項目ImageProcess;(2)將CImageProcessVie

48、w類的基類設(shè)為CScrollView類;(3)將DIBAPI.H,DIBAPI.CPP,DIB.H和DIB.CPP增加到ImageProcess項目中;(4)將String Table中的字符串資源IDR_TRANSFTYPE修改為:nDib nDib nDib Files (*.bmp; *.dib)n.bmpnImageProcess.DocumentnImageP Document;(5)在CImageProcessDoc類中增加一個表示CDib對象指針公共數(shù)據(jù)成員m_pDib,并在CImageProcessDoc類的構(gòu)造函數(shù)中初始化它;(6)在CImageProcessDoc類重載的成

49、員函數(shù)Serialize的最開始處增加一行語句:m_pDib-Serialize(ar);(7)修改CImageProcessView類的OnInitialUpdate函數(shù)如下:Void CImageProcessView::OnInitialUpdate() CScrollView:OnInitialUpdate();CImageProcessDoc * pDoc =GetDocument();Csize sizeTotal(pDoc-m_pDib-GetWidth(),pDoc-m_pDib-GetHeight();SetScrollSizes(MM_TEXT,sizeTotal);CMa

50、inFrame *pAppFrame=( CMainFrame *) AfxGetApp()-m_pMainWnd;ASSERT_KINDOF(CMainFrame, pAppFrame);CRect rc;PAppFrame-GetClientRect(&rc);If (rc.Width() = sizeTotal.cx & rc.Height() = sizeTotal.cy & (sizeTotal.cx0| sizeTotal.cy0)ResizeParentToFit(FALSE);(8) 在CImageProcessView::OnDraw函數(shù)中調(diào)用CDib:Display函數(shù)顯示

51、DIB:Void CImageProcessView::OnDraw (CDC*pDC)CImageProcessDoc * pDoc =GetDocument();ASSERT_VALID(pDoc);If (!pDoc-m_pDib-IsEmpty()pDoc- m_pDib-Display(Pdc,0,0);(9) 用ClassWizard給個菜單命令增加處理函數(shù),包括COMMAND和UPDATA_COMMAND_UI處理函數(shù);(10)各菜單命令的UPDATA_COMMAND_UI處理函數(shù)結(jié)構(gòu)相同,在函數(shù)中,將菜單命令的有效條件設(shè)為m_pDib不為空;(11)由于每一種圖像處理算法都涉及

52、一個處理的強度,需要調(diào)用一個相同的對話框來獲取參數(shù)。先在資源編輯器中建立該對話框模版IDD_CONVOLUTE,用classWizard為它創(chuàng)建對應(yīng)的對話框類,并在類代碼中實現(xiàn)有關(guān)的代碼;(12)調(diào)用相應(yīng)的處理函數(shù)實現(xiàn)每一種圖像處理的處理函數(shù);(13)協(xié)調(diào)調(diào)色板;(14)在項目工程中加入輸入庫winmm.lib,使Delay函數(shù)調(diào)用的timeGetTime函數(shù)能被正確連接。4.2.2主界面設(shè)計數(shù)字圖像處理軟件主界面,考慮到圖像處理的方便,決定采用多文檔界面。如圖4-3所示。圖4-3 數(shù)字圖像處理軟件主界面4.2.3菜單設(shè)計主菜單如圖4-4所示,包括文件、編輯、查看、窗口、圖像變換、藝術(shù)效果、平

53、銳、邊緣檢測、邊緣增強等菜單項。圖4-4 數(shù)字圖像處理軟件主菜單另外,圖像變換菜單中含有快速傅里葉變換和余弦變換等子菜單;藝術(shù)效果中有浮雕和油畫等子菜單;邊緣檢測中有Sobel邊緣檢測、Hough邊緣檢測、Canny邊緣檢測、均勻邊緣檢測和差異邊緣檢測等子菜單;邊緣增強菜單中有垂直邊緣和水平邊緣等子菜單;圖像形態(tài)學(xué)中有腐蝕、膨脹、開運算、閉運算,邊緣提取等子菜單。如圖4-5所示。圖4-5 數(shù)字圖像處理軟件子菜單4.2.4工具欄設(shè)計工具欄如圖4-6所示,包括新建、打開、保存和關(guān)于等。圖4-6 數(shù)字圖像處理軟件工具欄4.3數(shù)字圖像處理結(jié)果此處僅介紹幾種經(jīng)過處理后的圖像,如圖4-7所示,為圖像原圖。圖4-7 原圖經(jīng)過一些數(shù)字圖像處理軟件處理過后,如圖4-8、4-9、4-10、4-11、4-12所示。 圖4-8 經(jīng)過浮雕后的圖像圖4-9 經(jīng)過油畫后的圖像圖4-10 經(jīng)過sobel邊緣檢測后的圖像圖4-11 經(jīng)過邊緣

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論