第三章VC++90圖像編程基礎課件1_第1頁
第三章VC++90圖像編程基礎課件1_第2頁
第三章VC++90圖像編程基礎課件1_第3頁
第三章VC++90圖像編程基礎課件1_第4頁
第三章VC++90圖像編程基礎課件1_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第三章VC++圖像編程基礎3.1VC++可視化編程3.2位圖基礎3.3設計CImage類3.4使用CImage類3.5圖像的顯示3.6CImage類應用實例3.1VC++可視化編程3.1.1概述

VC++是Microsoft公司推出的開發(fā)Win32應用程序的面向對象的可視化集成工具。

VC++提供了Microsoft基礎類庫(MFC),對Windows所用的Win32應用程序接口(API)進行了徹底的封裝,從而可以使用面向對象的方法來進行Win32應用程序的開發(fā)。

優(yōu)點:大大縮短了應用程序開發(fā)周期,降低了開發(fā)成本,也將程序員從大量的復雜勞動中解放出來。VC++包含源代碼文本編輯器、設計用戶界面(菜單、對話框、圖標等)的資源編輯器、項目管理器、檢查程序錯誤的集成調試器等工具。它還提供了功能強大的應用程序向導工具AppWizard和類向導工具ClassWizard。

AppWizard用于生成各種不同類型的具有Windows界面風格的應用程序的基本框架;在生成應用程序框架后,使用ClassWizard便可輕松完成創(chuàng)建新類、定義消息處理函數(shù)、重載虛擬函數(shù)等操作。3.1.2用戶界面圖3-1VC++6.0用戶界面

用VC++6.0開發(fā)應用程序主要涉及三大類型的文件:文件(Files)、項目(Projects)和工作區(qū)(Workspaces)。在VC++6.0中,通常意義下開發(fā)一個Windows應用程序是指生成一個項目,該項目包含著一組相關的文件,如各種頭文件(.h)、實現(xiàn)文件(.cpp)、資源文件(.rc)、圖標文件(.ico)、位圖文件(.bmp)等,而該項目必須在一個工作區(qū)打開。當?shù)谝淮谓⒁粋€應用程序時,應選擇新建一個項目,此時VC++6.0自動建立一個工作區(qū),并把新建的項目在該工作區(qū)中打開,以后要對該項目進行修改、補充、增加等工作,只要打開對應的工作區(qū)即可。VC++6.0以項目工作區(qū)(ProjectWorkspace)的方式來組織文件、項目和項目配置,通過項目工作區(qū)窗口可以查看和訪問項目中的所有元素。首次創(chuàng)建項目工作區(qū)時,要創(chuàng)建一個項目工作區(qū)目錄、一個項目工作區(qū)文件、一個項目文件和一個工作區(qū)選項文件。項目工作區(qū)文件用于描述工作區(qū)及其內容,擴展名為.dsw。項目文件用于記錄項目中各種文件的名字和位置,擴展名為.dsp。工作區(qū)選項文件用于存儲項目工作區(qū)設置,擴展名為.opt。

項目工作區(qū)窗口主要由三個面板構成,即FileView、ResouceView和ClassView,分別用于顯示項目中定義的C++類、資源文件和包含在項目工作區(qū)中的文件。每個面板用于指定項目工作區(qū)中所有項目的不同視圖,視圖中每個文件夾可以包含其他文件夾或各種元素(如,子項目、文件、資源、類和標題等)。通過項目工作區(qū)窗口可以定位到項目中的任一位置,以對其進行相應的編輯(源程序、資源等)

文本編輯器的使用與Word非常類似,通過它可方便的進行程序源代碼的輸入、編輯和修改工作。在資源編輯器中可進行各種資源的編輯工作,如對話框、圖標、菜單、位圖等,從而直觀地設計程序的用戶界面。輸出窗口用于顯示項目建立過程中所產生的錯誤信息、調試過程中的輸出信息等,用它可以方便地定位到工程中的錯誤位置,觀察到程序調試過程中的輸出結果。3.1.3框架和文檔—視結構基于MFC的應用程序框架是VC++編程的骨架。運用MFC應用程序框架具有如下優(yōu)點:(1)標準化的程序結構和用戶接口:這對具有標準用戶界面的Win32程序來說,可以極大地減輕程序員的負擔,使程序員不必過多地考慮界面,而把主要精力放在程序設計上,以提高程序設計的效率。(2)框架產生的程序代碼短,運行速度快,具有很大的靈活性。(3)MFC封裝了Win32SDK中的幾乎所有的函數(shù),能夠實現(xiàn)Win32系統(tǒng)的任何功能。MFC框架的核心是文檔—視結構(Document-ViewArchitecture)。簡單地說,文檔—視結構就是將數(shù)據(jù)和對數(shù)據(jù)的觀察相分離,文檔僅處理數(shù)據(jù)的讀、寫等操作,視則是顯示和處理數(shù)據(jù)的窗口,視可以操作文檔中的數(shù)據(jù)。

MFC框架的基本結構包括應用程序對象、主框架窗口、文檔、視等,框架通過命令和消息將它們結合在一起,共同對用戶的操作做出響應。應用程序的對象類由CWinApp派生,一個應用程序有且僅有一個應用程序對象,它負責應用程序實例的初始化和進程結束時的資源清除,以及創(chuàng)建和管理應用程序所支持的所有文檔模板的工作。

主框架窗口是應用程序的主窗口。MFC框架定義了兩種基本的主框架窗口類,即單文檔接口SDI(SingleDocumentInterface)主框架窗口類和多文檔接口MDI(MultipleDocumentInterface)主框架窗口類。對于SDI,視是主框架窗口的子窗口;對于MDI,必須從CMDIChildWnd派生出主框架窗口的子窗口,視是該子窗口的子窗口。

文檔類由CDocument類派生,文檔是一個應用程序數(shù)據(jù)元素的集合,它構成應用程序所使用的數(shù)據(jù)單元,另外,它還提供了管理和維護數(shù)據(jù)的手段。文檔是一種數(shù)據(jù)源,數(shù)據(jù)源有很多種,最常見的是磁盤文件,但它不一定是一個磁盤文件,文檔的數(shù)據(jù)源也可以來自串行口、網(wǎng)絡或攝像機輸入信號等。視類從CView或其子類(CEditView、CFormView、CRecordView、CScrollView等)派生,是數(shù)據(jù)的用戶窗口,為用戶提供了文檔可視的數(shù)據(jù)顯示,它將文檔的部分或全部內容顯示在窗口中。視還給用戶提供了一個與文檔中的數(shù)據(jù)進行交互的界面,它把用戶的輸入轉化為對文檔中數(shù)據(jù)的操作。每個文檔都會有一個或多個視顯示,一個視既可以輸出到屏幕窗口中,也可以輸出到打印機上。圖3-2MFC應用程序框架結構(a)SDI框架結構;(b)MDI框架結構

文檔—視結構大大簡化了多數(shù)應用程序的設計開發(fā)過程。它帶來的好處主要有:

(1)將數(shù)據(jù)操作和數(shù)據(jù)顯示、用戶界面分離。這是一種“分而治之”的思想,這種思想使得模塊劃分更加合理、模塊獨立性更強,同時也簡化了數(shù)據(jù)操作和數(shù)據(jù)顯示、用戶界面設計工作。文檔只負責數(shù)據(jù)管理,不涉及用戶界面;視只負責數(shù)據(jù)輸出與用戶界面的交互,可以不考慮應用程序的數(shù)據(jù)是如何組織的,甚至當文檔中的數(shù)據(jù)結構發(fā)生變化時也不必改動視的代碼。

(2)MFC在文檔—視結構中提供了許多標準操作界面,包括新建文件、打開文件、保存文件、打印等,減輕了用戶的工作量。用戶不必再編寫這些重復的代碼,從而可以把更多的精力放到編寫應用程序特定功能的代碼上(主要是從數(shù)據(jù)源中讀取數(shù)據(jù)和顯示)。

(3)支持打印和打印預覽,用戶無需編寫代碼或只需要編寫很少的代碼,就可以為應用程序提供打印和打印預覽功能。同樣的功能如果自己寫的話,需要數(shù)千行代碼。由于文檔—視結構功能強大,因此一般用VC++進行程序設計時都首先使用AppWizard

生成基于文檔—視結構的單文檔或多文檔應用程序框架,然后在其中添加自己需要的代碼,完成應用程序的特定功能。3.1.4編程基本流程用VC++進行Win32可視化編程的基本流程如下:(l)生成框架:運行AppWizard,并按需要指定生成應用程序的選項,指定框架中視類的基類(CView、CEditView、CFormView、CScrollView、CTreeView等)。

AppWizard將按指定的選項生成應用程序框架和相關的文件,包括項目(project)的工作空間(workspace)文件和源文件,主要是應用程序(application)、文檔(document)、視(view)和主框窗口(mainframe)的C++代碼文件(*.cpp,*.h文件),以及缺省包含標準界面接口的資源文件(*.rc)。

(2)設計用戶界面:利用VC++資源編輯器編輯資源文件,設計菜單、對話框、工具條、字符串、加速鍵、位圖、圖標、光標等項目資源。

(3)聯(lián)接界面和代碼:利用ClassWizard把資源文件中定義的界面資源標識ID(如菜單項、工具條和對話框中的控件等)在指定的源文件中映射成相應的函數(shù)模板。

(4)編寫、修改函數(shù)代碼:利用ClassWizard可以方便地在源代碼編輯器(sourcecodeeditor)中跳轉到指定的函數(shù)代碼處。

(5)根據(jù)需要創(chuàng)建新類和編寫代碼:用ClassWizard創(chuàng)建新類,并生成相應的源文件。如新類是對話框類,可先用資源編輯器生成對話框模板,然后用ClassWizard創(chuàng)建對話框類代碼,并與模板聯(lián)接,編寫新類相關的源代碼。(6)實現(xiàn)文檔類:在AppWizard生成的框架基礎上設計文檔數(shù)據(jù)的數(shù)據(jù)結構,在文檔類中增加相應的成員變量和成員函數(shù),實現(xiàn)對數(shù)據(jù)的操作和文檔與數(shù)據(jù)的接口。

(7)實現(xiàn)框架中標準的文件操作命令,即Open、Save和SaveAs命令:框架已完成標準的文件操作命令的所有接口,程序員要做的僅僅是編寫文檔類的串行化(Serialize())成員函數(shù)。

(8)實現(xiàn)視類:框架已構造好了文檔與視的關系,視能方便地訪問文檔中的public數(shù)據(jù)成員,可根據(jù)文檔的需要構造一個或多個視類。通過ClassWizard把視的用戶接口資源映射成函數(shù)模板,并編寫函數(shù)代碼。

(9)如需要,增加分割窗口(splitterwindow):在SDI的主框窗口類或MDI的子窗口類中添加一個CSplitterWnd對象,并在窗口類的OnCreateClient成員函數(shù)中對CSplitterWnd對象進行創(chuàng)建和初始化。如果用戶分割了一個窗口,框架將給文檔創(chuàng)建并增加附加的視對象。

(10)建立、調試、修改應用程序。如有問題,可根據(jù)需要重復步驟(2)~(10)。

(11)測試應用程序。如有問題,可根據(jù)需要重復步驟(2)~(11)。(12)結束。3.2位圖(bitmap)基礎Vc++中(Windows系統(tǒng))把位圖分為兩類:設備相關位圖和設備無關位圖。3.2.1與設備相關位圖(DDB)與設備相關位圖是一種內部位圖格式,它顯示的圖像依計算機顯示系統(tǒng)的設置不同而不同,因此一般不存儲文件。結構BITMAP定義了DDB位圖的類型、寬度、高度、顏色格式和像素位值。該結構在Windows.h中定義如下(MSDN中可以查到):TypedefstructtagBITMAP{

intbmType;//位圖類型,必須為0

intbmWith;//寬度

intbmHeight;//高度

intbmWidthBytes;//每一掃描行字節(jié)數(shù)

BYTEbmPlanes;//顏色層數(shù)

BYTEbmBitsPixel;//每一像素所占的位數(shù)

LPVOIDbmBits;//存放像素值內存塊地址

}BITMAP;WindowsSDK提供了標準的DDB位圖操作數(shù),MFC中定義了CBitmap類來說明DDB位圖,CBitmap類封裝的主要函數(shù):

LoadBitmap():從應用程序的資源中裝入位圖資源。

CreateBitmap():用指定了寬、高和位圖模式的內存位圖來創(chuàng)建位圖。

CreateCompatibleBitmap():創(chuàng)建與指定設備兼容的位圖。

GetBitmap():從位圖中獲取信息

SetBitmapBits():用指定的圖像位來設置位圖的位值。3.2.2設備無關位圖(DIB)設備無關位圖(DIB)可以在不同的機器系統(tǒng)中顯示位圖所固有的顏色,屬于一種外部的位圖格式,與硬件無關,存儲文件格式的后綴為.bmp;BMP文件組成(分別使用MSDN查看!)

文件頭結構BITMAPFILEHEADER位圖信息頭結構BITMAPINFOHEADER顏色信息表RGBQUAD圖像像素數(shù)據(jù)3.3CImage類介紹數(shù)字圖像處理編程一般用VC++編程環(huán)境,VC++環(huán)境是一個非常優(yōu)秀的編程環(huán)境,非常適合圖像處理編程,它集成了C/C++,并且提供了很多實用的框架,能快速的進行工程開發(fā)。在VC++6.0及以下版本中沒有專門的圖像處理類,但有幾個用于圖像處理的API函數(shù),使用起來不是很方便,需要用戶自己封裝專門的圖像處理類。從VC++.NET開始的版本提供了一個跟圖像有關的類——CImage類,這個類封裝了跟圖像有關的很多操作。CImage類的成員可分為連接與創(chuàng)建、輸入與輸出、位圖類型與參數(shù),以及圖形繪制與位圖塊傳送等4類。1.連接與創(chuàng)建

Attach()將一個DIB(或DDB)位圖與CImage對象相連接;

Detach()位圖與CImage對象相分離;

Create()創(chuàng)建一個DIB位圖并將它與已有CImage對象相連接;

Destroy()位圖與CImage對象相分離并刪除;2.輸入與輸出

GetImporterFilterString()返回系統(tǒng)支持的輸入文件格式類型及其描述;

GetExporterFilterString()返回系統(tǒng)支持的輸出文件格式類型及其描述;

Load()讀入指定圖像文件中的圖像;

LoadFromResource()讀入指定資源文件中的圖像;

Save()按指定類型保存圖像,文件名中不能省略后綴;

IsNull()判別源圖像文件是否已經讀入;3.位圖類型與參數(shù)

GetWidth()返回當前圖像的寬度(以像素為單位);

GetHeight()返回當前圖像的高度(以像素為單位);

GetBPP()返回當前圖像的每個像素的位數(shù);

GetBits()返回當前圖像像素數(shù)據(jù)的指針

GetPitch()返回相鄰兩行像素首地址之間的間隔;GetPixelAddress()返回指定像素數(shù)據(jù)存放位置的存儲地址;GetMaxColorTableEntries()返回調色板單元數(shù);IsDibSection()確定位圖是否為DIB位圖;IsIndexed()判別位圖中是否有調色板;IsTransparencySupported()判別應用程序是否支持透明位圖;AlphaBlend()是否支持透明或半透明顯示的狀態(tài);4.圖形繪制與位圖塊傳送GetDC()返回當前位圖的設備描述表;ReleaseDC()釋放設備描述表;GetPixel()返回指定位置像素的顏色;SetPixel()設置指定位置像素的顏色;SetPixelIndexed()設置指定位置像素顏色的索引值;SetPixelRGB()設置指定位置像素的紅綠藍分量;GetColorTable()獲取調色板顏色分量(紅、綠、藍)值;SetColorTable()設置調色板顏色分量(紅、綠、藍)值;SetTransparentColor()設置透明顏色的索引值,只能有一種顏色可為透明;Draw()從源矩形復制到目標矩形,支持伸縮、融合與透明;BitBlt()從位圖的一個矩行區(qū)域復制到另一位圖上的指定區(qū)域;MaskBlt()位圖塊傳送時須與指定的模板圖像做邏輯操作;PlgBlt()從位圖的矩形區(qū)域到另一位圖上平行四邊形間的位塊傳輸;StretchBlt()從源矩形復制到目標矩形,支持伸縮;TransparentBlt()位圖塊傳送時復制到透明色的位圖;3.6CImage類應用實例:實驗一3.6.1建立應用程序框架(見實驗指導書)

圖像處理軟件包---OpenCV什么是OpenCVOpenCV是Intel公司開發(fā)的開源計算機視覺庫。

它由一系列C函數(shù)和少量C++類構成,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。重要特性OpenCV擁有包括300多個C函數(shù)的跨平臺的中、高層API。它不依賴于其它的外部庫——盡管也可以使用某些外部庫。OpenCV對非商業(yè)應用和商業(yè)應用都是免費(FREE)的。(細節(jié)參考license)。OpenCV為IntelIntegratedPerformancePrimitives(IPP)提供了透明接口。

這意味著如果有為特定處理器優(yōu)化的的IPP庫,OpenCV將在運行時自動加載這些庫。

更多關于IPP的信息請參考:/software/products/ipp/index.htm誰創(chuàng)建了它作者列表可以在文件AUTHORS中找到。此外,還有很多人給出了建議、補丁、BUG報告等等。一個不太完整的列表在文件THANKS中。很多“雷鋒”式的熱心人的奉獻還在繼續(xù)完善之中常用的版本OpenCV2.3.1,大量C++類函數(shù)目前最新版本:OpenCV2.4OpenCV2.3.1介紹Mat類簡介在2001年剛剛出現(xiàn)的時候,OpenCV基于C

語言接口而建。為了在內存(memory)中存放圖像,當時采用名為IplImage

的C語言結構體,時至今日這仍出現(xiàn)在大多數(shù)的舊版教程和教學材料。但這種方法必須接受C語言所有的不足,這其中最大的不足要數(shù)手動內存管理,其依據(jù)是用戶要為開辟和銷毀內存負責。雖然對于小型的程序來說手動管理內存不是問題,但一旦代碼開始變得越來越龐大,你需要越來越多地糾纏于這個問題,而不是著力解決你的開發(fā)目標。OpenCV在2.0版本中引入了一個新的C++接口,利用自動內存管理給出了解決問題的新方法。Mat最大的優(yōu)勢跟STL很相似,使用這個方法,你不需要糾結在管理內

溫馨提示

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

評論

0/150

提交評論