




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計任務(wù)書學(xué)生姓名: 專業(yè)班級:指導(dǎo)教師: 工作單位:題 目: 初始條件:要求完成的主要任務(wù): (包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)時間安排:指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日 目錄摘要2第一章 引言.31.1基礎(chǔ)知識.31.2本數(shù)字圖像處理界面處理內(nèi)容介紹.4啟動界面.4主界面.4第二章 系統(tǒng)分析.4 2.1設(shè)計要求. 4 2.2系統(tǒng)處理流程分析.5第三章 系統(tǒng)設(shè)計.5 3.1系統(tǒng)的設(shè)計語言.5 3.2系統(tǒng)總體結(jié)構(gòu)設(shè)計.5 系統(tǒng)總體結(jié)構(gòu)圖.5 系統(tǒng)模塊設(shè)計.6第四章系統(tǒng)詳細(xì)設(shè)計.74.1基類的設(shè)計.74.2 各模塊的詳細(xì)設(shè)計.8歡迎界
2、面設(shè)計84.2.2主界面設(shè)計.9第五章 結(jié)論與心得體會19第六章 參考文獻(xiàn).20第七章 關(guān)鍵代碼21基于VC+平臺簡單數(shù)字圖像處理界面設(shè)計摘要:該數(shù)字圖像處理界面是基于Microsoft Visual C+ 6.0 MFC多文檔編程的圖像處理界面,實現(xiàn).bmp格式圖像的瀏覽與編輯,導(dǎo)入和導(dǎo)出,圖像特效顯示,邊緣檢測,旋轉(zhuǎn)和翻轉(zhuǎn)圖片,圖片增強優(yōu)化,以及打印輸出圖片。是一款功能較簡潔的數(shù)字圖像管理界面,實現(xiàn)對.bmp格式圖像的操作。該界面包含兩部分:啟動界面和主界面。 BMP文件是Windows操作系統(tǒng)所推薦和支持的圖像文件格式,是一種將內(nèi)存或顯示器的圖像數(shù)據(jù)不經(jīng)過壓縮而直接按位存盤的文件格式,一
3、般來說BMP文件分成4個部分:位圖頭文件,位圖信息頭,顏色表,位圖數(shù)據(jù).同時BMP文件文件可以分為DIB格式和DDB格式,其中DIB格式是與設(shè)備無關(guān)的BMP文件,通用性很強.Windows支持一些重要的DIB訪問函數(shù),但都沒有封裝到MFC中,這里我們封裝了一個DIB類,其包含DIB文圖處理所需要的基本成員變量和成員函數(shù),進(jìn)而以該類為基類派生其他類,實現(xiàn)程序的維護(hù)和移植,從而利用面向?qū)ο蟮姆绞綄崿F(xiàn)圖像的可視化編程。關(guān)鍵詞: 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 引言數(shù)字圖像處理(Digital Image Processing
9、)又稱為計算機圖像處理,它是指將圖像信號轉(zhuǎn)換成數(shù)字信號并利用計算機對其進(jìn)行處理的過程。數(shù)字圖像處理最早出現(xiàn)于20世紀(jì)50年代,當(dāng)時的電子計算機已經(jīng)發(fā)展到一定水平,人們開始利用計算機來處理圖形和圖像信息。隨著計算機的發(fā)展,數(shù)字圖像處理技術(shù)也不斷的進(jìn)步,實現(xiàn)了對圖像圖像增強、復(fù)原、編碼、壓縮等,在空間和軍事高科技中扮演越來越重要的角色。隨著數(shù)字化與多媒體時代的來臨,數(shù)字圖像處理已經(jīng)成為必備的基礎(chǔ)知識。近幾十年來由于計算機技術(shù)的蓬勃發(fā)展,圖像處理技術(shù)也得到了空前的發(fā)展和應(yīng)用。目前,圖像處理技術(shù)已經(jīng)廣泛應(yīng)用于工業(yè)、軍事、醫(yī)學(xué)、交通、農(nóng)業(yè)、天氣預(yù)報、銀行、超市、重要部門的監(jiān)控報警系統(tǒng)、可視電話、網(wǎng)絡(luò)傳輸
10、等等領(lǐng)域,成為各個學(xué)科學(xué)習(xí)和研究對象。隨著圖像處理技術(shù)的廣泛應(yīng)用,學(xué)習(xí)和掌握這門科學(xué)顯得格外重要,圖像處理已經(jīng)成為信息技術(shù)相關(guān)領(lǐng)域的核心課程。本課題主要實現(xiàn)圖像的一些簡單特效顯示,圖像的旋轉(zhuǎn)和鏡像、圖像的增強處理,圖像灰度變換,圖像邊緣檢測等。1.1基礎(chǔ)知識組成數(shù)字圖像的基本單位是像素(Pixel),也就是說數(shù)字圖像是像素的集合。顯示器在顯示圖像時采用電子槍從左到右掃描一行,為每個像素著色,然后從上倒下掃描整個屏幕的方式,由于人眼的視覺停留,可以顯示出完整的畫面.為了防止閃爍,每秒電子槍要重復(fù)掃描幾十次的掃描過程,人眼感受不到因屏幕刷新也產(chǎn)生的閃爍,這種顯示器稱為位映像設(shè)備。所謂位映像,是指一
11、個二維的像素矩陣,矩陣的元素值就是像素的灰度值,而位圖就是采用位映像方法顯示和存儲的圖像。彩色圖像和灰度圖像:灰度圖像是數(shù)字圖像最基本形式,可以從黑白照片數(shù)字化得到或則通過對彩色圖像去色處理得到,灰度圖像只表示圖像的亮度信息而沒有顏色信息,灰度圖像的每個像素點上只包含一個量化的灰度級(0-255)來表示該點的亮度水平,計算機一般用1個字節(jié)(8個二進(jìn)制位)來存儲。彩色圖像的數(shù)據(jù)不僅包含亮度信息,還包含顏色信息,圖像中每一個像素由RGB(紅綠藍(lán))三個分量組成,計算機一般用3個字節(jié)(24位二進(jìn)制)來存儲像素的顏色信息。BMP位圖文件結(jié)構(gòu)位圖頭文件位圖信息頭顏色表位圖數(shù)據(jù)圖1.1 BMP圖像文件結(jié)構(gòu)如
12、圖1.1所示BMP文件由文件頭、位圖信息頭、顏色信息和圖形數(shù)據(jù)四部分組成。在編程時它們以結(jié)構(gòu)體類型在計算機中存儲。1、位圖文件頭:主要包含文件類型(必須是0x424D,即字符串“BM”),文件大小以及文件頭到實際的位圖數(shù)據(jù)的偏移字節(jié)數(shù);2、位圖信息頭:包含圖象的尺寸信息、每個像素所占位數(shù)(bit)、圖像是否壓縮、圖像所用的顏色數(shù)等信息, 顏色信息包含圖像所用到的顏色表,顯示圖像時需用到這個顏色表來生成調(diào)色板;3、調(diào)色板(Palette:調(diào)色板實際上是一個數(shù)組存有RGB 信息的表;4、位圖數(shù)據(jù):對于用到調(diào)色板的位圖,圖像數(shù)據(jù)就是該象素顏在調(diào)色板中的索引值。對于24位真彩色圖,圖像數(shù)據(jù)就是實際的R
13、、G、B三個分量的值。1.2本數(shù)字圖像處理界面處理內(nèi)容介紹啟動界面為了追求該圖像處理的界面的美觀性,在設(shè)計主界面前,先設(shè)計一個歡迎界面,即以一個經(jīng)過photoshop處理過的圖像作為對話框,在運行主界面程序前,先顯示該對話框。主界面該數(shù)字圖像處理界面是基于VC+6.0MFC多文檔編程的界面程序,實現(xiàn)數(shù)字圖像的簡單查看與編輯操作。主界面主要內(nèi)容有:圖像文件瀏覽:實現(xiàn)對.bmp格式圖像文件的瀏覽。圖像特效顯示:主要有自上而下掃描顯示,從左至右的滑動顯示和漸進(jìn)顯示。視圖-文檔的設(shè)置:實現(xiàn)了執(zhí)行操作后新舊圖像在不同視圖中顯示設(shè)置。圖像的灰度變換:包括圖像的二值化,彩色圖像轉(zhuǎn)換灰度圖像,灰度圖像轉(zhuǎn)換8位
14、圖像。圖像的鏡像與旋轉(zhuǎn)變換:包括水平鏡像,垂直鏡像,順時針旋轉(zhuǎn)90度,逆時針旋轉(zhuǎn)90度,圖像旋轉(zhuǎn)180度。圖像的增強處理:主要是圖像銳化處理。圖像的邊緣檢測和形態(tài)學(xué)處理:包括羅伯茨算子邊緣檢測,圖像輪廓提取 該界面主要實現(xiàn)了.bmp格式圖像的瀏覽、編輯、打印、特效設(shè)置、視圖設(shè)置、變換等幾大功能。2 系統(tǒng)需求分析需求分析簡單地說就是分析用戶的需求。需求分析是設(shè)計數(shù)據(jù)庫的起點,需求分析的結(jié)果是否準(zhǔn)確地反映了用戶的實際要求,將直接影響到后面各個階段的設(shè)計,并影響到設(shè)計結(jié)果是否合理和實用。2.1設(shè)計要求 根據(jù)設(shè)計內(nèi)容,設(shè)計的主要要求有:(1)設(shè)計歡迎界面并在程序中實現(xiàn)歡迎界面先于主界面顯示;(2)實現(xiàn)
15、主界面的功能設(shè)計:圖像文件瀏覽(.bmp格式圖像的導(dǎo)入),圖像特效顯示,視圖-文檔的設(shè)置,圖像的灰度變換,圖像的鏡像與旋轉(zhuǎn)變換,圖像的增強處理,圖像的邊緣檢測和形態(tài)學(xué)處理。2.2系統(tǒng)處理流程分析通過對系統(tǒng)的組織結(jié)構(gòu)和功能進(jìn)行分析,畫出業(yè)務(wù)流程圖,它非常易于閱讀和理解,可以幫助我們了解該業(yè)務(wù)的具體處理過程,發(fā)現(xiàn)和處理系統(tǒng)的調(diào)查工作中的錯誤和疏漏,修改和刪除原系統(tǒng)的不合理部分。通過對系統(tǒng)的需求分析,系統(tǒng)的基本功能已經(jīng)確定。整個系統(tǒng)各個模塊的業(yè)務(wù)流,如圖2.1所示:開 始?xì)g迎界面主界面圖像特效顯示圖像的灰度變換圖像邊緣檢測和形態(tài)學(xué)處理圖像的增強處理圖像的鏡像與旋轉(zhuǎn)變換圖2.1業(yè)務(wù)流程圖3系統(tǒng)設(shè)計本階
16、段的主要任務(wù)是設(shè)計程序的體系結(jié)構(gòu),確定程序組成模塊,以及各模塊之間的關(guān)系。3.1系統(tǒng)的設(shè)計語言數(shù)字圖像處理系統(tǒng)采用Microsoft Visual C+ 6.0MFC作為開發(fā)平臺。 3.2系統(tǒng)總體結(jié)構(gòu)設(shè)計 系統(tǒng)總體結(jié)構(gòu)圖數(shù)字圖像處理界面的總體結(jié)構(gòu)設(shè)計如圖3.1所示:主界面文件操作鏡像與旋轉(zhuǎn)灰度變換另存為操作打開操作關(guān)閉操作保存操作垂直鏡像變換順時針旋轉(zhuǎn)90度新建操作水平鏡像變換灰值化打印操作二值化特效顯示掃描顯示漸進(jìn)顯示滑動顯示逆時針旋轉(zhuǎn)90度 啟動界面數(shù)字圖像處理界面256色->8位圖圖像銳化圖 3.1 數(shù)字圖像處理界面總體結(jié)構(gòu)設(shè)計 系統(tǒng)模塊設(shè)計模塊設(shè)計是對處理流程圖的注釋性書面文件,
17、以幫助程序設(shè)計人員進(jìn)一步了解模塊的功能和設(shè)計要求數(shù)字圖像處理系統(tǒng)主要分為兩大模塊,即歡迎界面和主界面,其中主界面又分為文件操作模塊,特效顯示模塊,圖像鏡像與旋轉(zhuǎn)模塊,圖像增強處理模塊,圖像邊緣檢測和形態(tài)學(xué)處理模塊。具體的模塊設(shè)計如下: 1.歡迎界面:該模塊實現(xiàn)以一個經(jīng)過photoshop處理過的圖像作為對話框,在運行主界面程序前,先顯示該對話框。2.主界面:(1)文件操作模塊:該模塊主要實現(xiàn)圖像的文件操作,包括新建操作,打開操作.保存操作,另存為操作,關(guān)閉操作,打印操作等。(2) 特效顯示模塊:該模塊實現(xiàn)了圖像在視圖中的顯示方式,包括自上而下掃描顯示,從左至右的滑動顯示和漸進(jìn)顯示。 (3)圖像
18、鏡像與旋轉(zhuǎn)模塊:該模塊實現(xiàn)了圖像的鏡像變換和圖像旋轉(zhuǎn)顯示,包括水平鏡像,垂直鏡像,順時針旋轉(zhuǎn)90度,逆時針旋轉(zhuǎn)90度,圖像旋轉(zhuǎn)180度。 (4)圖像增強處理模塊:該模塊主要實現(xiàn)了圖像銳化效果。(5)圖像邊緣檢測模塊:該模塊實現(xiàn)了圖像邊緣輪廓檢測,包括羅伯茨算子邊緣檢測,圖像輪廓提取。(6)圖像灰度變換模塊:該模塊實現(xiàn)了彩色圖像變灰度格式,灰度圖像變彩色格式和二值化操作。4 系統(tǒng)詳細(xì)設(shè)計 4.1基類的設(shè)計BMP文件是Windows操作系統(tǒng)所推薦和支持的圖像文件格式,是一種將內(nèi)存或顯示器的圖像數(shù)據(jù)不經(jīng)過壓縮而直接按位存盤的文件格式,同時BMP文件文件可以分為DIB格式和DDB格式,其中DIB格式是
19、與設(shè)備無關(guān)的BMP文件,通用性很強。Windows支持一些重要的DIB訪問函數(shù),但都沒有封裝到MFC中,這里我們封裝了一個DIB類,其包含DIB位圖處理所需要的基本成員變量和成員函數(shù),進(jìn)而以該類為基類派生其他類,實現(xiàn)程序的維護(hù)和移植。在這里我們命名這個基類為ImgCenterDib,各種算法的實現(xiàn)都是以ImgCenterDib類為基類派生出來。根據(jù)前面預(yù)備知識和程序編寫的需要,這里定義ImgCenterDib類代碼如下:class ImgCenterDibpublic: unsigned char * m_pImgData; /圖像數(shù)據(jù)指針 LPRGBQUAD m_lpColorTable;
20、/圖像顏色表指針int m_nBitCount; /每像素占的位數(shù)private: LPBYTE m_lpDib; /指向DIB的指針 HPALETTE m_hPalette; /邏輯調(diào)色板句柄int m_nColorTableLength; /顏色表長度(多少個表項)protected: int m_imgWidth; /圖像的寬,像素為單位int m_imgHeight; /圖像的高,像素為單位LPBITMAPINFOHEADER m_lpBmpInfoHead; /圖像信息頭指針public: ImgCenterDib();/不帶參數(shù)的構(gòu)造函數(shù)ImgCenterDib(CSize siz
21、e, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData); /帶參數(shù)的構(gòu)造函數(shù)ImgCenterDib();/析構(gòu)函數(shù)CSize GetDimensions();/獲取DIB的尺寸(寬高)BOOL Read(LPCTSTR lpszPathName); /DIB讀函數(shù) BOOL Write(LPCTSTR lpszPathName); /DIB寫函數(shù)BOOL Draw(CDC* pDC, CPoint origin, CSize size); /顯示DIBvoid ReplaceDib(CSize size, int
22、nBitCount, LPRGBQUAD lpColorTable,unsigned char *pImgData); /用新的數(shù)據(jù)替換DIBint ComputeColorTabalLength(int nBitCount); /計算顏色表的長度private:void MakePalette();/創(chuàng)建邏輯調(diào)色板void Empty();/清理空間 ;同時將各個模塊函數(shù)封裝起來成為一個類,這些類都以ImgCenterDib類共有繼承,在主程序中調(diào)用,減少代碼的重復(fù)性,提高利用率。派生關(guān)系如圖4.1:基類ImgCenterDib(public)派生的特效顯示類:SpecialEffectSh
23、ow派生的灰度變換類:GrayTrans派生的圖像增強類:Pic_Enhance派生的幾何變換類:GeometryTrans派生的圖像邊緣檢測類: Pic_Segment 圖4.1 基類與派生類結(jié)構(gòu)關(guān)系圖4.2 各模塊的詳細(xì)設(shè)計4.2.1歡迎界面設(shè)計用photoshop軟件根據(jù)內(nèi)容的需要處理一張圖片,并保存為.bmp格式,然后在Microsoft Visual C+ 6.0中載入該圖片。設(shè)計思想:歡迎界面在程序運行時是以圖形式顯現(xiàn)的,這里要封裝一個位圖的類Cbtmap(派生于位圖類CBitmap),獲取圖像的寬,高,創(chuàng)建邏輯調(diào)色板等等;之后創(chuàng)建一個啟動窗口類,名為Csplash(派生于窗口基類
24、CWnd),這兩個類均封裝了一些函數(shù),它們之間通過參數(shù)傳遞和函數(shù)調(diào)用,在主程序代碼中聲明Splash類的對象,調(diào)用Csplash類中函數(shù)從而實現(xiàn)設(shè)計目標(biāo)。啟動窗口類的主要代碼如下:class Csplash : public CWndpublic: Csplash();/構(gòu)造函數(shù)public: void Create( UINT nBitmapID );/調(diào)用CreateEx創(chuàng)建窗口public: virtual Csplash();/析構(gòu)函數(shù)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()函數(shù)中加入如下代碼:Csplash wndSplash; /聲明Splash類
27、的對象wndSplash.Create(IDB_WZDSPLASH); /調(diào)用Create()wndSplash.UpdateWindow();Sleep(2000);/定時2秒程序運行截圖如下:(歡迎界面)4.2.2主界面設(shè)計(1)文件操作模塊文件操作模塊是整個系統(tǒng)中最基本的組成成分,該模塊主要實現(xiàn)圖像的文件操作,包括新建操作,打開操作.保存操作,另存為操作,關(guān)閉操作,打印操作。通過對用戶的需求分析得出文件操作模塊的功能結(jié)構(gòu)圖,文件操作模塊的功能結(jié)構(gòu)圖如圖4.2所示:文件操作模塊打開操作新建操作圖像保存圖像打印另存為操作關(guān)閉操作圖 4.2 文件操作模塊功能結(jié)構(gòu)圖在文件操作模塊,新建操作,關(guān)閉
28、操作和圖像打印操作可以直接調(diào)用系統(tǒng)提供的不需要重載的函數(shù)很容易就實現(xiàn),其他操作都需要將文件下的.bmp格式的圖像數(shù)據(jù)讀進(jìn)計算機內(nèi)存中生成DIB, 存放在m_lpDib(指向DIB的指針)所指向的緩沖區(qū)。文件打開操作的偽代碼描述如下所示: 文件的另存為操作偽代碼如下:取得文件路徑名稱;調(diào)用ImgCenterDib的write函數(shù)讀圖形入內(nèi)存中;判斷讀操作是否成功,若成功設(shè)置標(biāo)記并返回True,否則返回FALSE取得文件路徑名稱;調(diào)用ImgCenterDib的Read函數(shù)讀圖形入內(nèi)存中;判斷讀操作是否成功,若成功設(shè)置標(biāo)記并返回True,否則返回FALSE功能截圖如下: 菜單欄:另存為操作:(2)特
29、效顯示模塊特效顯示模塊實現(xiàn)了圖像在視圖中的顯示方式,包括自上而下掃描顯示,從左至右的滑動顯示和漸進(jìn)顯示。經(jīng)過分析圖像特效顯示功能,得出圖像處理的功能模塊圖如圖4.3所示:特效顯示模塊掃描顯示漸進(jìn)顯示滑動顯示 圖4.3特效顯示模塊功能結(jié)構(gòu)圖特效顯示類SpecialEffectShow是在基類ImgCenterDib基礎(chǔ)上派生出來的,特效顯示類設(shè)計代碼如下:class SpecialEffectShow : public ImgCenterDib public:SpecialEffectShow(CSize size, int nBitCount, LPRGBQUAD lpColorTable,
30、unsigned char *pImgData);/帶參數(shù)的構(gòu)造函數(shù)void Scan(CDC*pDC);/掃描特效顯示void Slide(CDC*pDC);/滑動特效顯示void FadeIn(CDC * pDC);/漸進(jìn)特效顯示virtual SpecialEffectShow();protected:SpecialEffectShow();/防止從外部訪問無參數(shù)的構(gòu)造函數(shù);利用類向?qū)?,給相應(yīng)的控件定義消息處理函數(shù),如下表表1主要的消息處理函數(shù)表序號ID號及類名消息處理函數(shù)函數(shù)功能1ID_scanOnscan掃描顯示2ID_slideOnslide滑動顯示3ID_FadeinOnFade
31、in漸進(jìn)顯示在picture_sysView.cpp重載消息處理函數(shù),這三個消息處理函數(shù)代碼基本相似,共同操作偽代碼如下:獲取文檔類中m_dib的指針,訪問當(dāng)前DIB數(shù)據(jù);定義SpecialEffectShow類的對象SpShow,用當(dāng)前DIB數(shù)據(jù)為其初始化;獲得設(shè)備環(huán)境變量;傳遞設(shè)備環(huán)境指針,調(diào)用滑動/掃描/漸進(jìn)顯示程序;功能截圖如下:掃描顯示:滑動顯示:漸進(jìn)顯示(3)圖像灰度變換模塊圖像灰度變換模塊實現(xiàn)了彩色圖像變灰度格式,灰度圖像變彩色格式和二值化操作。經(jīng)過分析圖像灰度變換功能,得出圖像處理的功能模塊圖如圖4.4所示:灰度變換模塊塊二值化灰度變彩色格式彩色變灰度格式圖4.4 灰度變換模塊
32、功能結(jié)構(gòu)圖灰度變換類GrayTrans是在基類ImgCenterDib基礎(chǔ)上派生出來的, 灰度變換類設(shè)計代碼如下:class GrayTrans:public ImgCenterDibpublic:int m_nBitCountOut; /輸出圖像每像素位數(shù)unsigned char * m_pImgDataOut; /輸出圖像位圖數(shù)據(jù)指針LPRGBQUAD m_lpColorTableOut; /輸出圖像顏色表private:int m_imgWidthOut; /圖像的寬,像素為單位int m_imgHeightOut; /圖像的高int m_nColorTableLengthOut;/輸
33、出圖像顏色表長度public:GrayTrans();/不帶參數(shù)的構(gòu)造函數(shù)GrayTrans(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData);/帶參數(shù)的構(gòu)造函數(shù)GrayTrans();CSize GetDimensions();/以像素為單位返回輸出圖像的寬和高void ColorToGray();/彩色變灰度格式void GrayToColor();/灰度變彩色格式void Binary(int threshold=128);/二值化;利用類向?qū)?,給相應(yīng)的控件定義消息處理函數(shù),如下表表2主
34、要的消息處理函數(shù)表序號ID號及類名消息處理函數(shù)函數(shù)功能1ID_TOGRAYOnTogray彩色變灰度格式2ID_GraytocolorOnGraytocolor灰度變彩色格式3ID_BinTwoOnBinTwo二值化在picture_sysView.cpp重載消息處理函數(shù),這三個消息處理函數(shù)代碼基本相似,共同操作偽代碼如下:獲取文檔類中m_dib的指針,訪問當(dāng)前DIB數(shù)據(jù);判斷灰度圖像還是彩色圖像;分別定義GrayTrans類的對象,調(diào)用相應(yīng)的函數(shù);建立一個新視圖,顯示分割結(jié)果;功能截圖如下:彩色變灰度格式:灰度變彩色格式:二值化:(4)圖像鏡像與旋轉(zhuǎn)模塊鏡像與旋轉(zhuǎn)模塊圖像鏡像與旋轉(zhuǎn)模塊實現(xiàn)了
35、圖像的鏡像變換和圖像旋轉(zhuǎn)顯示,包括水平鏡像,垂直鏡像,順時針旋轉(zhuǎn)90度,逆時針旋轉(zhuǎn)90度,圖像旋轉(zhuǎn)180度。其功能模塊圖如圖4.5所示:旋轉(zhuǎn)180度水平鏡像垂直鏡像順時針旋轉(zhuǎn)90逆時針旋轉(zhuǎn)9090圖4.5圖像鏡像與旋轉(zhuǎn)模塊功能結(jié)構(gòu)圖鏡像與旋轉(zhuǎn)類GeometryTrans是在基類ImgCenterDib基礎(chǔ)上派生出來的。該類與灰度變換類GrayTrans有相同的成員變量,其成員函數(shù)除CSize GetDimensions()函數(shù)外變?yōu)?GeometryTrans();GeometryTrans(CSize size, int nBitCount, LPRGBQUAD lpColorTable,
36、unsigned char *pImgData); /帶參數(shù)的構(gòu)造函數(shù)GeometryTrans();void Move(int offsetX, int offsetY); /平移void MirrorHori();/水平鏡像void MirrorVerti();/垂直鏡像void Clockwise90();/順時針旋轉(zhuǎn)90度void Anticlockwise90();/逆時針旋轉(zhuǎn)90度void Rotate180();/旋轉(zhuǎn)180利用類向?qū)?,給相應(yīng)的控件定義消息處理函數(shù),如下表表3主要的消息處理函數(shù)表序號ID號及類名消息處理函數(shù)函數(shù)功能1ID_XmirrorOn Xmirror水平鏡像
37、2ID_YmirrorOn Ymirror垂直鏡像3ID_Clock90On Clock90順時針旋轉(zhuǎn)90度4D_AnticClock90On AnticClock90逆時針旋轉(zhuǎn)90度5ID_Clock180On Clock180旋轉(zhuǎn)180度在picture_sysView.cpp重載消息處理函數(shù),這五個消息處理函數(shù)代碼基本相似,共同操作偽代碼如下:獲取文檔類中m_dib的指針,訪問當(dāng)前DIB數(shù)據(jù);判斷灰度圖像或者彩色圖像;分別定義GeometryTrans類的對象,調(diào)用相應(yīng)的函數(shù);建立一個新視圖,顯示分割結(jié)果;功能截圖如下: 水平鏡像: 垂直鏡像:順時針旋轉(zhuǎn)90度: 逆時針旋轉(zhuǎn)90度:旋轉(zhuǎn)1
38、80度:(5)圖像增強處理模塊圖像增強處理模塊主要實現(xiàn)了圖像銳化效果,是模糊的圖像變得更加清晰,顏色變得鮮明突出,更適合人眼觀察和識別。圖像增強處理類Pic_Enhance是在基類ImgCenterDib基礎(chǔ)上派生出來的, 圖像增強處理類設(shè)計代碼如下: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); /梯度銳化;利用類向?qū)?,給相應(yīng)的控件定義消息處理函數(shù),如下表表4主要的消息處理函數(shù)表序號ID號消息處理函數(shù)函數(shù)功能1ID_RuihuaOnRuihua圖像銳化獲取文檔類中m_dib的指針,訪問當(dāng)前DIB數(shù)據(jù);判斷是否是灰度圖像,若是進(jìn)行下一步,否則警告;定義Pic_Enhance類的對象,調(diào)用GradSharp函數(shù);建立一個新視圖,顯示操作結(jié)果;
40、在picture_sysView.cpp重載消息處理函數(shù),偽代碼敘述如下:功能截圖如下:(6) 圖像邊緣檢測模塊圖像邊緣檢測模塊實現(xiàn)了圖像邊緣輪廓檢測, 包括羅伯茨算子邊緣檢測,圖像輪廓提取,其功能模塊圖如圖4.6所示:圖像邊緣檢測模塊圖像輪廓提取羅伯茨算子邊緣檢測圖4.6圖像邊緣檢測模塊功能結(jié)構(gòu)圖圖像邊緣檢測類Pic_Segment是在基類ImgCenterDib基礎(chǔ)上派生出來的。該類與灰度變換類GrayTrans有相同的成員變量,其成員函數(shù)除CSize GetDimensions()函數(shù)相同,其他的成員函數(shù)如下:Pic_Segment();Pic_Segment(CSize size, i
41、nt nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData); /帶參數(shù)的構(gòu)造函數(shù)Pic_Segment();void Roberts();/Roberts算void ContourExtract();/輪廓提取利用類向?qū)?,給相應(yīng)的控件定義消息處理函數(shù),如下表表5主要的消息處理函數(shù)表序號ID號消息處理函數(shù)函數(shù)功能1ID_RobertsOn Roberts羅伯茨算子2ID_OutlineOn Outline輪廓提取在picture_sysView.cpp重載消息處理函數(shù),這2個消息處理函數(shù)代碼基本相似,共同操作偽代碼敘述如下:獲取文
42、檔類中m_dib的指針,訪問當(dāng)前DIB數(shù)據(jù);判斷是否是灰度圖像(二值圖像),若是進(jìn)行下一步,否則警告;在消息函數(shù)定義Pic_Segment類的1個對象segmen,調(diào)用Roberts(或ContourExtract)函數(shù);建立一個新視圖,顯示操作結(jié)果;功能截圖如下:羅伯茨算子:輪廓提取:5 結(jié)論與心得體會這次課程設(shè)計是以Microsoft Visual C+ 6.0 文檔視圖編程為基礎(chǔ)實現(xiàn)的,這就要求對MFC文檔視圖操作有一定的了解和操作編程能力,在做課程設(shè)計前,我查閱了該方面相關(guān)的書籍,對我完成歡迎界面和主界面的設(shè)計有很大的幫助。編程中在不同類之間函數(shù)參數(shù)和變量的傳遞和函數(shù)的調(diào)用出了問題,但
43、是理清函數(shù)的編譯編譯順序和變量的類型這些問題都逐一解決,同時增強了對工具欄,菜單欄的手動操作能力。 另外一點是對.bmp圖像處理的實現(xiàn),數(shù)字圖像處理關(guān)鍵是算法的設(shè)計思想和算法的實現(xiàn),通過這次課程設(shè)計,使我了解到了算法設(shè)計的重要性(算法設(shè)計是編程實現(xiàn)的前提),提高了自己動手編程的能力和汲取一些先進(jìn)算法的思想,這對以后圖像處理的深入學(xué)習(xí)大有幫助。 該數(shù)字圖像界面是基于Microsoft Visual C+ 6.0的MFC多文檔實現(xiàn)的,在界面設(shè)計上看起來過于單調(diào),界面設(shè)計簡單,但易于操作;Visual C+ 6.0的MFC對話框的編程是界面看起來更加美觀,更接近軟件系統(tǒng),給人不一樣的感覺,提高了工具
44、欄和菜單欄的編程實現(xiàn)難度和設(shè)計的復(fù)雜度,這是今后學(xué)習(xí)的方向。6.參考文獻(xiàn)1鄭莉 董淵 張瑞豐, C+語言程序設(shè)計(第三版), 清華大學(xué)出版社 20032David J.Kruglinski(美)等, Visual C+ 6.0技術(shù)內(nèi)幕,北京希望電子出版社,20023謝鳳英 趙丹培,Visual C+ 數(shù)字圖像處理,電子工業(yè)出版社,20084求是科技 張宏林,精通Visual C+ 數(shù)字圖像處理典型算法及實現(xiàn),人民郵電出版社,20085劉銳寧 宋坤等,Visual C+從入門到精通,清華大學(xué)出版社,2008關(guān)鍵源代碼:/ImgCenterDib.cpp/ImgCenterDib:ImgCente
45、rDib() /缺省變量的構(gòu)造函數(shù) m_lpDib=NULL;/初始化m_lpDib為空。 m_lpColorTable=NULL;/顏色表指針為空 m_pImgData=NULL; / 圖像數(shù)據(jù)指針為空 m_lpBmpInfoHead=NULL; / 圖像信息頭指針為空 m_hPalette = NULL;/調(diào)色板為空ImgCenterDib:ImgCenterDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData) if(pImgData=NULL)/沒有位圖數(shù)據(jù)傳入,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);/根據(jù)每像素位數(shù),計算顏色表長度int lineByte=(m_imgWidth*nBitCount/8+3)/4*4; int imgBufSize=m_imgHeight*lineBy
47、te;/位圖數(shù)據(jù)緩沖區(qū)的大?。▓D像大小) m_lpDib=new BYTE sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableLength+imgBufSize;/為m_lpDib一次性分配內(nèi)存,生成DIB結(jié)構(gòu)/填寫B(tài)ITMAPINFOHEADER結(jié)構(gòu)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) /若有顏色表,則將顏色表拷貝進(jìn)DIB的顏色表位置m_lpColorTable=(LPRGBQUAD)(m_lpDib+sizeof(BITMAPINFOHEADER); memcpy(m_lpColorTable,lpColorTable,sizeof(RGBQUAD) * m_nColorTableLength);/顏色表拷貝
50、 MakePalette();/創(chuàng)建邏輯調(diào)色板 m_pImgData = (LPBYTE)m_lpDib+sizeof(BITMAPINFOHEADER)+ sizeof(RGBQUAD) * m_nColorTableLength;/用m_pImgData指向DIB位圖數(shù)據(jù)起始位置 memcpy(m_pImgData,pImgData,imgBufSize);/拷貝圖像數(shù)據(jù)進(jìn)DIB位圖數(shù)據(jù)區(qū)ImgCenterDib:ImgCenterDib()/析構(gòu)函數(shù),釋放資源if(m_lpDib != NULL) delete m_lpDib; if(m_hPalette != NULL):Delete
51、Object(m_hPalette);/如果有調(diào)色板,釋放調(diào)色板BOOL ImgCenterDib:Draw(CDC* pDC, CPoint origin, CSize size)/顯示DIB位圖 HPALETTE hOldPal=NULL;/舊的調(diào)色板句柄 if(m_lpDib = NULL) return FALSE; if(m_hPalette != NULL) hOldPal=:SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE);pDC->SetStretchBltMode(COLORONCOLOR);/設(shè)置位圖伸縮模式:StretchDIBits(pDC->GetSafeHdc(), origin.x
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 唐山市2024-2025學(xué)年高一上學(xué)期期末考試英語試卷(含答案)
- 中國詩詞大會:30道關(guān)于詩詞中兒童形象的選擇題(附答案和解釋)
- 2025年區(qū)塊鏈技術(shù)考試題及答案
- 2025年大咯血考試試題及答案
- 2025年暴雨心理測試試題及答案
- 保健按摩師中級復(fù)習(xí)測試附答案
- 工業(yè)機器人應(yīng)用編程1+X中級練習(xí)試題
- 工業(yè)機器人復(fù)習(xí)試題含答案
- 2025年二波疫情測試題及答案
- 2025年傳熱學(xué)試題庫及答案
- 應(yīng)用文寫作-2020-2024年高考英語試題分類匯編(解析版)
- 離心式泵安裝
- 橋式起重機PLC控制改造設(shè)計
- 《老舍及作品分析》課件
- 高考語文復(fù)習(xí)【知識精研】信息類文本閱讀 課件
- 2024年9月證券專項《證券投資顧問業(yè)務(wù)》真題卷(74題)
- 保健品項目的商業(yè)計劃書五篇
- 印章管理責(zé)任承諾書4篇
- 《吊裝起重作業(yè)培訓(xùn)》課件
- 2024年度供應(yīng)商管理培訓(xùn)課件
- 6、水平四+田徑18課時大單元計劃-《雙手頭上前擲實心球》
評論
0/150
提交評論