基于VC數字圖像處理課程設計說明書含源程序_第1頁
基于VC數字圖像處理課程設計說明書含源程序_第2頁
基于VC數字圖像處理課程設計說明書含源程序_第3頁
基于VC數字圖像處理課程設計說明書含源程序_第4頁
基于VC數字圖像處理課程設計說明書含源程序_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、課程設計任務書學生姓名: 專業班級:指導教師: 工作單位:題 目: 初始條件:要求完成的主要任務: (包括課程設計工作量及其技術要求,以及說明書撰寫等具體要求)時間安排:指導教師簽名: 年 月 日系主任(或責任教師)簽名: 年 月 日 目錄摘要2第一章 引言.31.1基礎知識.31.2本數字圖像處理界面處理內容介紹.4啟動界面.4主界面.4第二章 系統分析.4 2.1設計要求. 4 2.2系統處理流程分析.5第三章 系統設計.5 3.1系統的設計語言.5 3.2系統總體結構設計.5 系統總體結構圖.5 系統模塊設計.6第四章系統詳細設計.74.1基類的設計.74.2 各模塊的詳細設計.8歡迎界

2、面設計84.2.2主界面設計.9第五章 結論與心得體會19第六章 參考文獻.20第七章 關鍵代碼21基于VC+平臺簡單數字圖像處理界面設計摘要:該數字圖像處理界面是基于Microsoft Visual C+ 6.0 MFC多文檔編程的圖像處理界面,實現.bmp格式圖像的瀏覽與編輯,導入和導出,圖像特效顯示,邊緣檢測,旋轉和翻轉圖片,圖片增強優化,以及打印輸出圖片。是一款功能較簡潔的數字圖像管理界面,實現對.bmp格式圖像的操作。該界面包含兩部分:啟動界面和主界面。 BMP文件是Windows操作系統所推薦和支持的圖像文件格式,是一種將內存或顯示器的圖像數據不經過壓縮而直接按位存盤的文件格式,一

3、般來說BMP文件分成4個部分:位圖頭文件,位圖信息頭,顏色表,位圖數據.同時BMP文件文件可以分為DIB格式和DDB格式,其中DIB格式是與設備無關的BMP文件,通用性很強.Windows支持一些重要的DIB訪問函數,但都沒有封裝到MFC中,這里我們封裝了一個DIB類,其包含DIB文圖處理所需要的基本成員變量和成員函數,進而以該類為基類派生其他類,實現程序的維護和移植,從而利用面向對象的方式實現圖像的可視化編程。關鍵詞: BMP文件 圖像處理DIB位圖 界面 Abstract:The digital image processing interface is based on Microsof

4、t Visual C + + 6.0 MFC multi-document image processing programming interface, to achieve. Bmp format for image browsing and editing, import and export, image effects showed that edge detection, rotate and flip images, pictures enhance the optimization, as well as print output picture. Is a function

5、of the digital image than the simple management interface, to achieve. Bmp format images of the operation. The interface contains two parts: interface and the main interface to start.     BMP file is a Windows operating system and support the recommended image file format, is a memory

6、 or display the compressed image data is not directly based on digital archiving of file formats, BMP files are generally divided into four parts: the first bitmap documents, BITMAPINFOHEADER, color table, the bitmap data. At the same time, BMP file formats and can be divided into DIB format DDB, DI

7、B format which has nothing to do with the equipment of the BMP files, a strong GM. Windows in support of the DIB to visit a number of important function, but are not packaged in the MFC, where we have a package type DIB, the DIB includes Ventura needed to deal with members of the basic variables and

8、 member functions, and such a base class for other types of derivatives, the realization of the procedure maintenance and transplantation, and thus the use of object-oriented way of programming the visual image.Key words: BMP fileImage processingDIB bitmapInterface1 引言數字圖像處理(Digital Image Processing

9、)又稱為計算機圖像處理,它是指將圖像信號轉換成數字信號并利用計算機對其進行處理的過程。數字圖像處理最早出現于20世紀50年代,當時的電子計算機已經發展到一定水平,人們開始利用計算機來處理圖形和圖像信息。隨著計算機的發展,數字圖像處理技術也不斷的進步,實現了對圖像圖像增強、復原、編碼、壓縮等,在空間和軍事高科技中扮演越來越重要的角色。隨著數字化與多媒體時代的來臨,數字圖像處理已經成為必備的基礎知識。近幾十年來由于計算機技術的蓬勃發展,圖像處理技術也得到了空前的發展和應用。目前,圖像處理技術已經廣泛應用于工業、軍事、醫學、交通、農業、天氣預報、銀行、超市、重要部門的監控報警系統、可視電話、網絡傳輸

10、等等領域,成為各個學科學習和研究對象。隨著圖像處理技術的廣泛應用,學習和掌握這門科學顯得格外重要,圖像處理已經成為信息技術相關領域的核心課程。本課題主要實現圖像的一些簡單特效顯示,圖像的旋轉和鏡像、圖像的增強處理,圖像灰度變換,圖像邊緣檢測等。1.1基礎知識組成數字圖像的基本單位是像素(Pixel),也就是說數字圖像是像素的集合。顯示器在顯示圖像時采用電子槍從左到右掃描一行,為每個像素著色,然后從上倒下掃描整個屏幕的方式,由于人眼的視覺停留,可以顯示出完整的畫面.為了防止閃爍,每秒電子槍要重復掃描幾十次的掃描過程,人眼感受不到因屏幕刷新也產生的閃爍,這種顯示器稱為位映像設備。所謂位映像,是指一

11、個二維的像素矩陣,矩陣的元素值就是像素的灰度值,而位圖就是采用位映像方法顯示和存儲的圖像。彩色圖像和灰度圖像:灰度圖像是數字圖像最基本形式,可以從黑白照片數字化得到或則通過對彩色圖像去色處理得到,灰度圖像只表示圖像的亮度信息而沒有顏色信息,灰度圖像的每個像素點上只包含一個量化的灰度級(0-255)來表示該點的亮度水平,計算機一般用1個字節(8個二進制位)來存儲。彩色圖像的數據不僅包含亮度信息,還包含顏色信息,圖像中每一個像素由RGB(紅綠藍)三個分量組成,計算機一般用3個字節(24位二進制)來存儲像素的顏色信息。BMP位圖文件結構位圖頭文件位圖信息頭顏色表位圖數據圖1.1 BMP圖像文件結構如

12、圖1.1所示BMP文件由文件頭、位圖信息頭、顏色信息和圖形數據四部分組成。在編程時它們以結構體類型在計算機中存儲。1、位圖文件頭:主要包含文件類型(必須是0x424D,即字符串“BM”),文件大小以及文件頭到實際的位圖數據的偏移字節數;2、位圖信息頭:包含圖象的尺寸信息、每個像素所占位數(bit)、圖像是否壓縮、圖像所用的顏色數等信息, 顏色信息包含圖像所用到的顏色表,顯示圖像時需用到這個顏色表來生成調色板;3、調色板(Palette:調色板實際上是一個數組存有RGB 信息的表;4、位圖數據:對于用到調色板的位圖,圖像數據就是該象素顏在調色板中的索引值。對于24位真彩色圖,圖像數據就是實際的R

13、、G、B三個分量的值。1.2本數字圖像處理界面處理內容介紹啟動界面為了追求該圖像處理的界面的美觀性,在設計主界面前,先設計一個歡迎界面,即以一個經過photoshop處理過的圖像作為對話框,在運行主界面程序前,先顯示該對話框。主界面該數字圖像處理界面是基于VC+6.0MFC多文檔編程的界面程序,實現數字圖像的簡單查看與編輯操作。主界面主要內容有:圖像文件瀏覽:實現對.bmp格式圖像文件的瀏覽。圖像特效顯示:主要有自上而下掃描顯示,從左至右的滑動顯示和漸進顯示。視圖-文檔的設置:實現了執行操作后新舊圖像在不同視圖中顯示設置。圖像的灰度變換:包括圖像的二值化,彩色圖像轉換灰度圖像,灰度圖像轉換8位

14、圖像。圖像的鏡像與旋轉變換:包括水平鏡像,垂直鏡像,順時針旋轉90度,逆時針旋轉90度,圖像旋轉180度。圖像的增強處理:主要是圖像銳化處理。圖像的邊緣檢測和形態學處理:包括羅伯茨算子邊緣檢測,圖像輪廓提取 該界面主要實現了.bmp格式圖像的瀏覽、編輯、打印、特效設置、視圖設置、變換等幾大功能。2 系統需求分析需求分析簡單地說就是分析用戶的需求。需求分析是設計數據庫的起點,需求分析的結果是否準確地反映了用戶的實際要求,將直接影響到后面各個階段的設計,并影響到設計結果是否合理和實用。2.1設計要求 根據設計內容,設計的主要要求有:(1)設計歡迎界面并在程序中實現歡迎界面先于主界面顯示;(2)實現

15、主界面的功能設計:圖像文件瀏覽(.bmp格式圖像的導入),圖像特效顯示,視圖-文檔的設置,圖像的灰度變換,圖像的鏡像與旋轉變換,圖像的增強處理,圖像的邊緣檢測和形態學處理。2.2系統處理流程分析通過對系統的組織結構和功能進行分析,畫出業務流程圖,它非常易于閱讀和理解,可以幫助我們了解該業務的具體處理過程,發現和處理系統的調查工作中的錯誤和疏漏,修改和刪除原系統的不合理部分。通過對系統的需求分析,系統的基本功能已經確定。整個系統各個模塊的業務流,如圖2.1所示:開 始歡迎界面主界面圖像特效顯示圖像的灰度變換圖像邊緣檢測和形態學處理圖像的增強處理圖像的鏡像與旋轉變換圖2.1業務流程圖3系統設計本階

16、段的主要任務是設計程序的體系結構,確定程序組成模塊,以及各模塊之間的關系。3.1系統的設計語言數字圖像處理系統采用Microsoft Visual C+ 6.0MFC作為開發平臺。 3.2系統總體結構設計 系統總體結構圖數字圖像處理界面的總體結構設計如圖3.1所示:主界面文件操作鏡像與旋轉灰度變換另存為操作打開操作關閉操作保存操作垂直鏡像變換順時針旋轉90度新建操作水平鏡像變換灰值化打印操作二值化特效顯示掃描顯示漸進顯示滑動顯示逆時針旋轉90度 啟動界面數字圖像處理界面256色->8位圖圖像銳化圖 3.1 數字圖像處理界面總體結構設計 系統模塊設計模塊設計是對處理流程圖的注釋性書面文件,

17、以幫助程序設計人員進一步了解模塊的功能和設計要求數字圖像處理系統主要分為兩大模塊,即歡迎界面和主界面,其中主界面又分為文件操作模塊,特效顯示模塊,圖像鏡像與旋轉模塊,圖像增強處理模塊,圖像邊緣檢測和形態學處理模塊。具體的模塊設計如下: 1.歡迎界面:該模塊實現以一個經過photoshop處理過的圖像作為對話框,在運行主界面程序前,先顯示該對話框。2.主界面:(1)文件操作模塊:該模塊主要實現圖像的文件操作,包括新建操作,打開操作.保存操作,另存為操作,關閉操作,打印操作等。(2) 特效顯示模塊:該模塊實現了圖像在視圖中的顯示方式,包括自上而下掃描顯示,從左至右的滑動顯示和漸進顯示。 (3)圖像

18、鏡像與旋轉模塊:該模塊實現了圖像的鏡像變換和圖像旋轉顯示,包括水平鏡像,垂直鏡像,順時針旋轉90度,逆時針旋轉90度,圖像旋轉180度。 (4)圖像增強處理模塊:該模塊主要實現了圖像銳化效果。(5)圖像邊緣檢測模塊:該模塊實現了圖像邊緣輪廓檢測,包括羅伯茨算子邊緣檢測,圖像輪廓提取。(6)圖像灰度變換模塊:該模塊實現了彩色圖像變灰度格式,灰度圖像變彩色格式和二值化操作。4 系統詳細設計 4.1基類的設計BMP文件是Windows操作系統所推薦和支持的圖像文件格式,是一種將內存或顯示器的圖像數據不經過壓縮而直接按位存盤的文件格式,同時BMP文件文件可以分為DIB格式和DDB格式,其中DIB格式是

19、與設備無關的BMP文件,通用性很強。Windows支持一些重要的DIB訪問函數,但都沒有封裝到MFC中,這里我們封裝了一個DIB類,其包含DIB位圖處理所需要的基本成員變量和成員函數,進而以該類為基類派生其他類,實現程序的維護和移植。在這里我們命名這個基類為ImgCenterDib,各種算法的實現都是以ImgCenterDib類為基類派生出來。根據前面預備知識和程序編寫的需要,這里定義ImgCenterDib類代碼如下:class ImgCenterDibpublic: unsigned char * m_pImgData; /圖像數據指針 LPRGBQUAD m_lpColorTable;

20、/圖像顏色表指針int m_nBitCount; /每像素占的位數private: LPBYTE m_lpDib; /指向DIB的指針 HPALETTE m_hPalette; /邏輯調色板句柄int m_nColorTableLength; /顏色表長度(多少個表項)protected: int m_imgWidth; /圖像的寬,像素為單位int m_imgHeight; /圖像的高,像素為單位LPBITMAPINFOHEADER m_lpBmpInfoHead; /圖像信息頭指針public: ImgCenterDib();/不帶參數的構造函數ImgCenterDib(CSize siz

21、e, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData); /帶參數的構造函數ImgCenterDib();/析構函數CSize GetDimensions();/獲取DIB的尺寸(寬高)BOOL Read(LPCTSTR lpszPathName); /DIB讀函數 BOOL Write(LPCTSTR lpszPathName); /DIB寫函數BOOL Draw(CDC* pDC, CPoint origin, CSize size); /顯示DIBvoid ReplaceDib(CSize size, int

22、nBitCount, LPRGBQUAD lpColorTable,unsigned char *pImgData); /用新的數據替換DIBint ComputeColorTabalLength(int nBitCount); /計算顏色表的長度private:void MakePalette();/創建邏輯調色板void Empty();/清理空間 ;同時將各個模塊函數封裝起來成為一個類,這些類都以ImgCenterDib類共有繼承,在主程序中調用,減少代碼的重復性,提高利用率。派生關系如圖4.1:基類ImgCenterDib(public)派生的特效顯示類:SpecialEffectSh

23、ow派生的灰度變換類:GrayTrans派生的圖像增強類:Pic_Enhance派生的幾何變換類:GeometryTrans派生的圖像邊緣檢測類: Pic_Segment 圖4.1 基類與派生類結構關系圖4.2 各模塊的詳細設計4.2.1歡迎界面設計用photoshop軟件根據內容的需要處理一張圖片,并保存為.bmp格式,然后在Microsoft Visual C+ 6.0中載入該圖片。設計思想:歡迎界面在程序運行時是以圖形式顯現的,這里要封裝一個位圖的類Cbtmap(派生于位圖類CBitmap),獲取圖像的寬,高,創建邏輯調色板等等;之后創建一個啟動窗口類,名為Csplash(派生于窗口基類

24、CWnd),這兩個類均封裝了一些函數,它們之間通過參數傳遞和函數調用,在主程序代碼中聲明Splash類的對象,調用Csplash類中函數從而實現設計目標。啟動窗口類的主要代碼如下:class Csplash : public CWndpublic:    Csplash();/構造函數public:    void Create( UINT nBitmapID );/調用CreateEx創建窗口public:    virtual Csplash();/析構函數protected:  

25、  /AFX_MSG(CWzdSplash)    afx_msg void OnPaint();    /AFX_MSG    DECLARE_MESSAGE_MAP()private:    Cbtmap m_bitmap;/私有成員變量;位圖類的主要代碼如下:class Cbtmap : public CBitmap public:    DECLARE_DYNAMIC(Cbtmap)Cbtmap();void LoadBitma

26、pEx(UINT nID, BOOL bIconBkgrd );    CPalette *GetPalette()return m_pPalette;public:    virtual Cbtmap();intm_Width;    int m_Height;private:    CPalette *m_pPalette;在CPicture_sysView:CPicture_sysView()函數中加入如下代碼:Csplash wndSplash; /聲明Splash類

27、的對象wndSplash.Create(IDB_WZDSPLASH); /調用Create()wndSplash.UpdateWindow();Sleep(2000);/定時2秒程序運行截圖如下:(歡迎界面)4.2.2主界面設計(1)文件操作模塊文件操作模塊是整個系統中最基本的組成成分,該模塊主要實現圖像的文件操作,包括新建操作,打開操作.保存操作,另存為操作,關閉操作,打印操作。通過對用戶的需求分析得出文件操作模塊的功能結構圖,文件操作模塊的功能結構圖如圖4.2所示:文件操作模塊打開操作新建操作圖像保存圖像打印另存為操作關閉操作圖 4.2 文件操作模塊功能結構圖在文件操作模塊,新建操作,關閉

28、操作和圖像打印操作可以直接調用系統提供的不需要重載的函數很容易就實現,其他操作都需要將文件下的.bmp格式的圖像數據讀進計算機內存中生成DIB, 存放在m_lpDib(指向DIB的指針)所指向的緩沖區。文件打開操作的偽代碼描述如下所示: 文件的另存為操作偽代碼如下:取得文件路徑名稱;調用ImgCenterDib的write函數讀圖形入內存中;判斷讀操作是否成功,若成功設置標記并返回True,否則返回FALSE取得文件路徑名稱;調用ImgCenterDib的Read函數讀圖形入內存中;判斷讀操作是否成功,若成功設置標記并返回True,否則返回FALSE功能截圖如下: 菜單欄:另存為操作:(2)特

29、效顯示模塊特效顯示模塊實現了圖像在視圖中的顯示方式,包括自上而下掃描顯示,從左至右的滑動顯示和漸進顯示。經過分析圖像特效顯示功能,得出圖像處理的功能模塊圖如圖4.3所示:特效顯示模塊掃描顯示漸進顯示滑動顯示 圖4.3特效顯示模塊功能結構圖特效顯示類SpecialEffectShow是在基類ImgCenterDib基礎上派生出來的,特效顯示類設計代碼如下:class SpecialEffectShow : public ImgCenterDib public:SpecialEffectShow(CSize size, int nBitCount, LPRGBQUAD lpColorTable,

30、unsigned char *pImgData);/帶參數的構造函數void Scan(CDC*pDC);/掃描特效顯示void Slide(CDC*pDC);/滑動特效顯示void FadeIn(CDC * pDC);/漸進特效顯示virtual SpecialEffectShow();protected:SpecialEffectShow();/防止從外部訪問無參數的構造函數;利用類向導,給相應的控件定義消息處理函數,如下表表1主要的消息處理函數表序號ID號及類名消息處理函數函數功能1ID_scanOnscan掃描顯示2ID_slideOnslide滑動顯示3ID_FadeinOnFade

31、in漸進顯示在picture_sysView.cpp重載消息處理函數,這三個消息處理函數代碼基本相似,共同操作偽代碼如下:獲取文檔類中m_dib的指針,訪問當前DIB數據;定義SpecialEffectShow類的對象SpShow,用當前DIB數據為其初始化;獲得設備環境變量;傳遞設備環境指針,調用滑動/掃描/漸進顯示程序;功能截圖如下:掃描顯示:滑動顯示:漸進顯示(3)圖像灰度變換模塊圖像灰度變換模塊實現了彩色圖像變灰度格式,灰度圖像變彩色格式和二值化操作。經過分析圖像灰度變換功能,得出圖像處理的功能模塊圖如圖4.4所示:灰度變換模塊塊二值化灰度變彩色格式彩色變灰度格式圖4.4 灰度變換模塊

32、功能結構圖灰度變換類GrayTrans是在基類ImgCenterDib基礎上派生出來的, 灰度變換類設計代碼如下:class GrayTrans:public ImgCenterDibpublic:int m_nBitCountOut; /輸出圖像每像素位數unsigned char * m_pImgDataOut; /輸出圖像位圖數據指針LPRGBQUAD m_lpColorTableOut; /輸出圖像顏色表private:int m_imgWidthOut; /圖像的寬,像素為單位int m_imgHeightOut; /圖像的高int m_nColorTableLengthOut;/輸

33、出圖像顏色表長度public:GrayTrans();/不帶參數的構造函數GrayTrans(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData);/帶參數的構造函數GrayTrans();CSize GetDimensions();/以像素為單位返回輸出圖像的寬和高void ColorToGray();/彩色變灰度格式void GrayToColor();/灰度變彩色格式void Binary(int threshold=128);/二值化;利用類向導,給相應的控件定義消息處理函數,如下表表2主

34、要的消息處理函數表序號ID號及類名消息處理函數函數功能1ID_TOGRAYOnTogray彩色變灰度格式2ID_GraytocolorOnGraytocolor灰度變彩色格式3ID_BinTwoOnBinTwo二值化在picture_sysView.cpp重載消息處理函數,這三個消息處理函數代碼基本相似,共同操作偽代碼如下:獲取文檔類中m_dib的指針,訪問當前DIB數據;判斷灰度圖像還是彩色圖像;分別定義GrayTrans類的對象,調用相應的函數;建立一個新視圖,顯示分割結果;功能截圖如下:彩色變灰度格式:灰度變彩色格式:二值化:(4)圖像鏡像與旋轉模塊鏡像與旋轉模塊圖像鏡像與旋轉模塊實現了

35、圖像的鏡像變換和圖像旋轉顯示,包括水平鏡像,垂直鏡像,順時針旋轉90度,逆時針旋轉90度,圖像旋轉180度。其功能模塊圖如圖4.5所示:旋轉180度水平鏡像垂直鏡像順時針旋轉90逆時針旋轉9090圖4.5圖像鏡像與旋轉模塊功能結構圖鏡像與旋轉類GeometryTrans是在基類ImgCenterDib基礎上派生出來的。該類與灰度變換類GrayTrans有相同的成員變量,其成員函數除CSize GetDimensions()函數外變為:GeometryTrans();GeometryTrans(CSize size, int nBitCount, LPRGBQUAD lpColorTable,

36、unsigned char *pImgData); /帶參數的構造函數GeometryTrans();void Move(int offsetX, int offsetY); /平移void MirrorHori();/水平鏡像void MirrorVerti();/垂直鏡像void Clockwise90();/順時針旋轉90度void Anticlockwise90();/逆時針旋轉90度void Rotate180();/旋轉180利用類向導,給相應的控件定義消息處理函數,如下表表3主要的消息處理函數表序號ID號及類名消息處理函數函數功能1ID_XmirrorOn Xmirror水平鏡像

37、2ID_YmirrorOn Ymirror垂直鏡像3ID_Clock90On Clock90順時針旋轉90度4D_AnticClock90On AnticClock90逆時針旋轉90度5ID_Clock180On Clock180旋轉180度在picture_sysView.cpp重載消息處理函數,這五個消息處理函數代碼基本相似,共同操作偽代碼如下:獲取文檔類中m_dib的指針,訪問當前DIB數據;判斷灰度圖像或者彩色圖像;分別定義GeometryTrans類的對象,調用相應的函數;建立一個新視圖,顯示分割結果;功能截圖如下: 水平鏡像: 垂直鏡像:順時針旋轉90度: 逆時針旋轉90度:旋轉1

38、80度:(5)圖像增強處理模塊圖像增強處理模塊主要實現了圖像銳化效果,是模糊的圖像變得更加清晰,顏色變得鮮明突出,更適合人眼觀察和識別。圖像增強處理類Pic_Enhance是在基類ImgCenterDib基礎上派生出來的, 圖像增強處理類設計代碼如下:class Pic_Enhance:public ImgCenterDib public:int m_nBitCountOut;unsigned char * m_pImgDataOut;LPRGBQUAD m_lpColorTableOut;int m_nColorTableLengthOut;public:Pic_Enhance();Pic_

39、Enhance(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData);Pic_Enhance();void GradSharp(BYTE bThre); /梯度銳化;利用類向導,給相應的控件定義消息處理函數,如下表表4主要的消息處理函數表序號ID號消息處理函數函數功能1ID_RuihuaOnRuihua圖像銳化獲取文檔類中m_dib的指針,訪問當前DIB數據;判斷是否是灰度圖像,若是進行下一步,否則警告;定義Pic_Enhance類的對象,調用GradSharp函數;建立一個新視圖,顯示操作結果;

40、在picture_sysView.cpp重載消息處理函數,偽代碼敘述如下:功能截圖如下:(6) 圖像邊緣檢測模塊圖像邊緣檢測模塊實現了圖像邊緣輪廓檢測, 包括羅伯茨算子邊緣檢測,圖像輪廓提取,其功能模塊圖如圖4.6所示:圖像邊緣檢測模塊圖像輪廓提取羅伯茨算子邊緣檢測圖4.6圖像邊緣檢測模塊功能結構圖圖像邊緣檢測類Pic_Segment是在基類ImgCenterDib基礎上派生出來的。該類與灰度變換類GrayTrans有相同的成員變量,其成員函數除CSize GetDimensions()函數相同,其他的成員函數如下:Pic_Segment();Pic_Segment(CSize size, i

41、nt nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData); /帶參數的構造函數Pic_Segment();void Roberts();/Roberts算void ContourExtract();/輪廓提取利用類向導,給相應的控件定義消息處理函數,如下表表5主要的消息處理函數表序號ID號消息處理函數函數功能1ID_RobertsOn Roberts羅伯茨算子2ID_OutlineOn Outline輪廓提取在picture_sysView.cpp重載消息處理函數,這2個消息處理函數代碼基本相似,共同操作偽代碼敘述如下:獲取文

42、檔類中m_dib的指針,訪問當前DIB數據;判斷是否是灰度圖像(二值圖像),若是進行下一步,否則警告;在消息函數定義Pic_Segment類的1個對象segmen,調用Roberts(或ContourExtract)函數;建立一個新視圖,顯示操作結果;功能截圖如下:羅伯茨算子:輪廓提取:5 結論與心得體會這次課程設計是以Microsoft Visual C+ 6.0 文檔視圖編程為基礎實現的,這就要求對MFC文檔視圖操作有一定的了解和操作編程能力,在做課程設計前,我查閱了該方面相關的書籍,對我完成歡迎界面和主界面的設計有很大的幫助。編程中在不同類之間函數參數和變量的傳遞和函數的調用出了問題,但

43、是理清函數的編譯編譯順序和變量的類型這些問題都逐一解決,同時增強了對工具欄,菜單欄的手動操作能力。 另外一點是對.bmp圖像處理的實現,數字圖像處理關鍵是算法的設計思想和算法的實現,通過這次課程設計,使我了解到了算法設計的重要性(算法設計是編程實現的前提),提高了自己動手編程的能力和汲取一些先進算法的思想,這對以后圖像處理的深入學習大有幫助。 該數字圖像界面是基于Microsoft Visual C+ 6.0的MFC多文檔實現的,在界面設計上看起來過于單調,界面設計簡單,但易于操作;Visual C+ 6.0的MFC對話框的編程是界面看起來更加美觀,更接近軟件系統,給人不一樣的感覺,提高了工具

44、欄和菜單欄的編程實現難度和設計的復雜度,這是今后學習的方向。6.參考文獻1鄭莉 董淵 張瑞豐, C+語言程序設計(第三版), 清華大學出版社 20032David J.Kruglinski(美)等, Visual C+ 6.0技術內幕,北京希望電子出版社,20023謝鳳英 趙丹培,Visual C+ 數字圖像處理,電子工業出版社,20084求是科技 張宏林,精通Visual C+ 數字圖像處理典型算法及實現,人民郵電出版社,20085劉銳寧 宋坤等,Visual C+從入門到精通,清華大學出版社,2008關鍵源代碼:/ImgCenterDib.cpp/ImgCenterDib:ImgCente

45、rDib() /缺省變量的構造函數 m_lpDib=NULL;/初始化m_lpDib為空。 m_lpColorTable=NULL;/顏色表指針為空 m_pImgData=NULL; / 圖像數據指針為空 m_lpBmpInfoHead=NULL; / 圖像信息頭指針為空 m_hPalette = NULL;/調色板為空ImgCenterDib:ImgCenterDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData) if(pImgData=NULL)/沒有位圖數據傳入,DIB為空m_lpD

46、ib=NULL;m_lpColorTable=NULL;m_pImgData=NULL; m_lpBmpInfoHead=NULL; m_hPalette = NULL;elsem_imgWidth=size.cx;m_imgHeight=size.cy;m_nBitCount=nBitCount; m_nColorTableLength=ComputeColorTabalLength(nBitCount);/根據每像素位數,計算顏色表長度int lineByte=(m_imgWidth*nBitCount/8+3)/4*4; int imgBufSize=m_imgHeight*lineBy

47、te;/位圖數據緩沖區的大?。▓D像大?。?m_lpDib=new BYTE sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableLength+imgBufSize;/為m_lpDib一次性分配內存,生成DIB結構/填寫BITMAPINFOHEADER結構m_lpBmpInfoHead = (LPBITMAPINFOHEADER) m_lpDib;m_lpBmpInfoHead->biSize = sizeof(BITMAPINFOHEADER);m_lpBmpInfoHead->biWidth = m_imgWidth

48、;m_lpBmpInfoHead->biHeight = m_imgHeight;m_lpBmpInfoHead->biPlanes = 1;m_lpBmpInfoHead->biBitCount = m_nBitCount;m_lpBmpInfoHead->biCompression = BI_RGB;m_lpBmpInfoHead->biSizeImage = 0;m_lpBmpInfoHead->biXPelsPerMeter = 0;m_lpBmpInfoHead->biYPelsPerMeter = 0;m_lpBmpInfoHead->

49、;biClrUsed = m_nColorTableLength;m_lpBmpInfoHead->biClrImportant = m_nColorTableLength;m_hPalette = NULL;if(m_nColorTableLength!=0) /若有顏色表,則將顏色表拷貝進DIB的顏色表位置m_lpColorTable=(LPRGBQUAD)(m_lpDib+sizeof(BITMAPINFOHEADER); memcpy(m_lpColorTable,lpColorTable,sizeof(RGBQUAD) * m_nColorTableLength);/顏色表拷貝

50、 MakePalette();/創建邏輯調色板 m_pImgData = (LPBYTE)m_lpDib+sizeof(BITMAPINFOHEADER)+ sizeof(RGBQUAD) * m_nColorTableLength;/用m_pImgData指向DIB位圖數據起始位置 memcpy(m_pImgData,pImgData,imgBufSize);/拷貝圖像數據進DIB位圖數據區ImgCenterDib:ImgCenterDib()/析構函數,釋放資源if(m_lpDib != NULL) delete m_lpDib; if(m_hPalette != NULL):Delete

51、Object(m_hPalette);/如果有調色板,釋放調色板BOOL ImgCenterDib:Draw(CDC* pDC, CPoint origin, CSize size)/顯示DIB位圖 HPALETTE hOldPal=NULL;/舊的調色板句柄 if(m_lpDib = NULL) return FALSE; if(m_hPalette != NULL) hOldPal=:SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE);pDC->SetStretchBltMode(COLORONCOLOR);/設置位圖伸縮模式:StretchDIBits(pDC->GetSafeHdc(), origin.x

溫馨提示

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

評論

0/150

提交評論