2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設計任務書</b></p><p>  學生姓名: 專業(yè)班級: </p><p>  指導教師: 工作單位: </p><p>  題 目:

2、 </p><p><b>  初始條件:</b></p><p>  要求完成的主要任務: (包括課程設計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p><b>  時間安排:</b></p><p>  指導教師簽名:

3、 年 月 日</p><p>  系主任(或責任教師)簽名: 年 月 日</p><p><b>  目錄</b></p><p>  摘要…………………………………………………………………………………………2</p><p>  引言………………………

4、……………………………………………………..3</p><p>  1.1基礎知識……………………………………………………………………….3</p><p>  1.2本數(shù)字圖像處理界面處理內(nèi)容介紹………………………………………….4</p><p>  1.2.1啟動界面……………………………………………………………….4</p><p>

5、  1.2.2主界面………………………………………………………………….4</p><p>  第二章 系統(tǒng)分析……………………………………………………………………….4</p><p>  2.1設計要求……………………………………………………………………. 4</p><p>  2.2系統(tǒng)處理流程分析………………………………………………………...5<

6、/p><p>  第三章 系統(tǒng)設計……………………………………………………………………..5</p><p>  3.1系統(tǒng)的設計語言…………………………………………………………….5</p><p>  3.2系統(tǒng)總體結(jié)構(gòu)設計………………………………………………………….5</p><p>  3.2.1 系統(tǒng)總體結(jié)構(gòu)圖…………………………

7、………………………….5</p><p>  3.2.2 系統(tǒng)模塊設計……………………………………………………….6</p><p>  第四章 系統(tǒng)詳細設計………………………………………………………………….7</p><p>  4.1基類的設計………………………………………………………………..7</p><p>  4.2 各模塊的詳

8、細設計………………………………………………………..8</p><p>  4.2.1歡迎界面設計…………………………………………………………8</p><p>  4.2.2主界面設計…………………………………………………………..9</p><p>  第五章 結(jié)論與心得體會………………………………………………………………19</p><p&

9、gt;  第六章 參考文獻……………………………………………………………………….20</p><p>  第七章 關(guān)鍵代碼…………………………………………………………………………21</p><p>  基于VC++平臺簡單數(shù)字圖像處理界面設計</p><p>  摘要:該數(shù)字圖像處理界面是基于Microsoft Visual C++ 6.0 MFC多文檔編程的圖

10、像處理界面,實現(xiàn).bmp格式圖像的瀏覽與編輯,導入和導出,圖像特效顯示,邊緣檢測,旋轉(zhuǎn)和翻轉(zhuǎn)圖片,圖片增強優(yōu)化,以及打印輸出圖片。是一款功能較簡潔的數(shù)字圖像管理界面,實現(xiàn)對.bmp格式圖像的操作。該界面包含兩部分:啟動界面和主界面。</p><p>  BMP文件是Windows操作系統(tǒng)所推薦和支持的圖像文件格式,是一種將內(nèi)存或顯示器的圖像數(shù)據(jù)不經(jīng)過壓縮而直接按位存盤的文件格式,一般來說BMP文件分成4個部分:位

11、圖頭文件,位圖信息頭,顏色表,位圖數(shù)據(jù).同時BMP文件文件可以分為DIB格式和DDB格式,其中DIB格式是與設備無關(guān)的BMP文件,通用性很強.Windows支持一些重要的DIB訪問函數(shù),但都沒有封裝到MFC中,這里我們封裝了一個DIB類,其包含DIB文圖處理所需要的基本成員變量和成員函數(shù),進而以該類為基類派生其他類,實現(xiàn)程序的維護和移植,從而利用面向?qū)ο蟮姆绞綄崿F(xiàn)圖像的可視化編程。</p><p>  關(guān)鍵詞:

12、BMP文件 圖像處理 DIB位圖 界面 </p><p>  Abstract:The digital image processing interface is based on Microsoft Visual C + + 6.0 MFC multi-document image processing programming interface, to achieve. Bmp for

13、mat 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 of the digital im

14、age than the simple management interface, to achieve. Bmp format images of the operation. The interface contains tw</p><p>  Key words: BMP file Image processing DIB bitmap Interface</p><p&g

15、t;<b>  1 引言</b></p><p>  數(shù)字圖像處理(Digital Image Processing)又稱為計算機圖像處理,它是指將圖像信號轉(zhuǎn)換成數(shù)字信號并利用計算機對其進行處理的過程。數(shù)字圖像處理最早出現(xiàn)于20世紀50年代,當時的電子計算機已經(jīng)發(fā)展到一定水平,人們開始利用計算機來處理圖形和圖像信息。隨著計算機的發(fā)展,數(shù)字圖像處理技術(shù)也不斷的進步,實現(xiàn)了對圖像圖像增強、復原、

16、編碼、壓縮等,在空間和軍事高科技中扮演越來越重要的角色。</p><p>  隨著數(shù)字化與多媒體時代的來臨,數(shù)字圖像處理已經(jīng)成為必備的基礎知識。近幾十年來由于計算機技術(shù)的蓬勃發(fā)展,圖像處理技術(shù)也得到了空前的發(fā)展和應用。目前,圖像處理技術(shù)已經(jīng)廣泛應用于工業(yè)、軍事、醫(yī)學、交通、農(nóng)業(yè)、天氣預報、銀行、超市、重要部門的監(jiān)控報警系統(tǒng)、可視電話、網(wǎng)絡傳輸?shù)鹊阮I域,成為各個學科學習和研究對象。隨著圖像處理技術(shù)的廣泛應用,學習和

17、掌握這門科學顯得格外重要,圖像處理已經(jīng)成為信息技術(shù)相關(guān)領域的核心課程。</p><p>  本課題主要實現(xiàn)圖像的一些簡單特效顯示,圖像的旋轉(zhuǎn)和鏡像、圖像的增強處理,圖像灰度變換,圖像邊緣檢測等。</p><p><b>  1.1基礎知識</b></p><p>  組成數(shù)字圖像的基本單位是像素(Pixel),也就是說數(shù)字圖像是像素的集合。顯示

18、器在顯示圖像時采用電子槍從左到右掃描一行,為每個像素著色,然后從上倒下掃描整個屏幕的方式,由于人眼的視覺停留,可以顯示出完整的畫面.為了防止閃爍,每秒電子槍要重復掃描幾十次的掃描過程,人眼感受不到因屏幕刷新也產(chǎn)生的閃爍,這種顯示器稱為位映像設備。所謂位映像,是指一個二維的像素矩陣,矩陣的元素值就是像素的灰度值, 而位圖就是采用位映像方法顯示和存儲的圖像。</p><p>  彩色圖像和灰度圖像:灰度圖像是數(shù)字圖像

19、最基本形式,可以從黑白照片數(shù)字化得到或則通過對彩色圖像去色處理得到,灰度圖像只表示圖像的亮度信息而沒有顏色信息,灰度圖像的每個像素點上只包含一個量化的灰度級(0-255)來表示該點的亮度水平,計算機一般用1個字節(jié)(8個二進制位)來存儲。彩色圖像的數(shù)據(jù)不僅包含亮度信息,還包含顏色信息,圖像中每一個像素由RGB(紅綠藍)三個分量組成,計算機一般用3個字節(jié)(24位二進制)來存儲像素的顏色信息。</p><p>  圖1

20、.1 BMP圖像文件結(jié)構(gòu)</p><p>  如圖1.1所示BMP文件由文件頭、位圖信息頭、顏色信息和圖形數(shù)據(jù)四部分組成。在編程時它們以結(jié)構(gòu)體類型在計算機中存儲。</p><p>  1、位圖文件頭:主要包含文件類型(必須是0x424D,即字符串“BM”),文件大小以及文件頭到實際的位圖數(shù)據(jù)的偏移字節(jié)數(shù); </p><p>  2、位圖信息頭:包含圖象的尺寸信息、

21、每個像素所占位數(shù)(bit)、圖像是否壓縮、圖像所用的顏色數(shù)等信息, 顏色信息包含圖像所用到的顏色表,顯示圖像時需用到這個顏色表來生成調(diào)色板;</p><p>  3、調(diào)色板(Palette:調(diào)色板實際上是一個數(shù)組存有RGB 信息的表; </p><p>  4、位圖數(shù)據(jù):對于用到調(diào)色板的位圖,圖像數(shù)據(jù)就是該象素顏在調(diào)色板中的索引值。對于24位真彩色圖,圖像數(shù)據(jù)就是實際的R、G、B三個分量的

22、值。</p><p>  1.2本數(shù)字圖像處理界面處理內(nèi)容介紹</p><p><b>  1.2.1啟動界面</b></p><p>  為了追求該圖像處理的界面的美觀性,在設計主界面前,先設計一個歡迎界面,即以一個經(jīng)過photoshop處理過的圖像作為對話框,在運行主界面程序前,先顯示該對話框。</p><p>&l

23、t;b>  1.2.2主界面</b></p><p>  該數(shù)字圖像處理界面是基于VC++6.0MFC多文檔編程的界面程序,實現(xiàn)數(shù)字圖像的簡單查看與編輯操作。主界面主要內(nèi)容有:</p><p>  圖像文件瀏覽:實現(xiàn)對.bmp格式圖像文件的瀏覽。</p><p>  圖像特效顯示:主要有自上而下掃描顯示,從左至右的滑動顯示和漸進顯示。</p&

24、gt;<p>  視圖-文檔的設置:實現(xiàn)了執(zhí)行操作后新舊圖像在不同視圖中顯示設置。</p><p>  圖像的灰度變換:包括圖像的二值化,彩色圖像轉(zhuǎn)換灰度圖像,灰度圖像轉(zhuǎn)換8位圖像。</p><p>  圖像的鏡像與旋轉(zhuǎn)變換:包括水平鏡像,垂直鏡像,順時針旋轉(zhuǎn)90度,逆時針旋轉(zhuǎn)90度,圖像旋轉(zhuǎn)180度。</p><p>  圖像的增強處理:主要是圖像銳

25、化處理。</p><p>  圖像的邊緣檢測和形態(tài)學處理:包括羅伯茨算子邊緣檢測,圖像輪廓提取

26、 </p><p>  該界面主要實現(xiàn)了.bmp格式圖像的瀏覽、編輯、打印、特效設置、視圖設置、變換等幾大功能。</p><p><b>  2 系統(tǒng)

27、需求分析</b></p><p>  需求分析簡單地說就是分析用戶的需求。需求分析是設計數(shù)據(jù)庫的起點,需求分析的結(jié)果是否準確地反映了用戶的實際要求,將直接影響到后面各個階段的設計,并影響到設計結(jié)果是否合理和實用。</p><p><b>  2.1設計要求</b></p><p>  根據(jù)設計內(nèi)容,設計的主要要求有:(1)設計歡迎界

28、面并在程序中實現(xiàn)歡迎界面先于主界面顯示;(2)實現(xiàn)主界面的功能設計: 圖像文件瀏覽(.bmp格式圖像的導入), 圖像特效顯示, 視圖-文檔的設置, 圖像的灰度變換, 圖像的鏡像與旋轉(zhuǎn)變換, 圖像的增強處理, 圖像的邊緣檢測和形態(tài)學處理。</p><p>  2.2系統(tǒng)處理流程分析</p><p>  通過對系統(tǒng)的組織結(jié)構(gòu)和功能進行分析,畫出業(yè)務流程圖, 它非常易于閱讀和理解,可以幫助我們了

29、解該業(yè)務的具體處理過程,發(fā)現(xiàn)和處理系統(tǒng)的調(diào)查工作中的錯誤和疏漏,修改和刪除原系統(tǒng)的不合理部分。</p><p>  通過對系統(tǒng)的需求分析,系統(tǒng)的基本功能已經(jīng)確定。整個系統(tǒng)各個模塊的業(yè)務流,如圖2.1所示:</p><p><b>  圖2.1業(yè)務流程圖</b></p><p><b>  3 系統(tǒng)設計</b></p&

30、gt;<p>  本階段的主要任務是設計程序的體系結(jié)構(gòu),確定程序組成模塊,以及各模塊之間的關(guān)系。</p><p>  3.1系統(tǒng)的設計語言</p><p>  數(shù)字圖像處理系統(tǒng)采用Microsoft Visual C++ 6.0 MFC作為開發(fā)平臺。</p><p>  3.2系統(tǒng)總體結(jié)構(gòu)設計</p><p>  3.2.1 系

31、統(tǒng)總體結(jié)構(gòu)圖</p><p>  數(shù)字圖像處理界面的總體結(jié)構(gòu)設計如圖3.1所示:</p><p>  圖 3.1 數(shù)字圖像處理界面總體結(jié)構(gòu)設計</p><p>  3.2.2 系統(tǒng)模塊設計</p><p>  模塊設計是對處理流程圖的注釋性書面文件,以幫助程序設計人員進一步了解模塊的功能和設計要求數(shù)字圖像處理系統(tǒng)主要分為兩大模塊,即歡迎界面和

32、主界面,其中主界面又分為文件操作模塊,特效顯示模塊,圖像鏡像與旋轉(zhuǎn)模塊,圖像增強處理模塊,圖像邊緣檢測和形態(tài)學處理模塊。</p><p>  具體的模塊設計如下:</p><p>  1.歡迎界面:該模塊實現(xiàn)以一個經(jīng)過photoshop處理過的圖像作為對話框,在運行主界面程序前,先顯示該對話框。</p><p><b>  2.主界面:</b>

33、</p><p>  (1) 文件操作模塊: 該模塊主要實現(xiàn)圖像的文件操作,包括新建操作,打開操作.保存操作,另存為操作,關(guān)閉操作,打印操作等。</p><p>  (2) 特效顯示模塊:該模塊實現(xiàn)了圖像在視圖中的顯示方式,包括自上而下掃描顯示,從左至右的滑動顯示和漸進顯示。</p><p>  (3) 圖像鏡像與旋轉(zhuǎn)模塊:該模塊實現(xiàn)了圖像的鏡像變換和圖像旋轉(zhuǎn)顯示,

34、包括水平鏡像,垂直鏡像,順時針旋轉(zhuǎn)90度,逆時針旋轉(zhuǎn)90度,圖像旋轉(zhuǎn)180度。</p><p>  (4) 圖像增強處理模塊:該模塊主要實現(xiàn)了圖像銳化效果。</p><p>  (5) 圖像邊緣檢測模塊:該模塊實現(xiàn)了圖像邊緣輪廓檢測, 包括羅伯茨算子邊緣檢測,圖像輪廓提取。</p><p>  (6)圖像灰度變換模塊:該模塊實現(xiàn)了彩色圖像變灰度格式,灰度圖像變彩色格

35、式和二值化操作。</p><p><b>  4 系統(tǒng)詳細設計</b></p><p><b>  4.1基類的設計</b></p><p>  BMP文件是Windows操作系統(tǒng)所推薦和支持的圖像文件格式,是一種將內(nèi)存或顯示器的圖像數(shù)據(jù)不經(jīng)過壓縮而直接按位存盤的文件格式, 同時BMP文件文件可以分為DIB格式和DDB格式

36、,其中DIB格式是與設備無關(guān)的BMP文件,通用性很強。Windows支持一些重要的DIB訪問函數(shù),但都沒有封裝到MFC中,這里我們封裝了一個DIB類,其包含DIB位圖處理所需要的基本成員變量和成員函數(shù),進而以該類為基類派生其他類,實現(xiàn)程序的維護和移植。在這里我們命名這個基類為ImgCenterDib,各種算法的實現(xiàn)都是以ImgCenterDib類為基類派生出來。根據(jù)前面預備知識和程序編寫的需要,這里定義ImgCenterDib類代碼如下

37、:</p><p>  class ImgCenterDib</p><p>  { public:</p><p>  unsigned char * m_pImgData; //圖像數(shù)據(jù)指針</p><p>  LPRGBQUAD m_lpColorTable; //圖像顏色表指針</p><p>  in

38、t m_nBitCount; //每像素占的位數(shù)</p><p><b>  private:</b></p><p>  LPBYTE m_lpDib; //指向DIB的指針</p><p>  HPALETTE m_hPalette; //邏輯調(diào)色板句柄</p><p>  int m_nColorTableLeng

39、th; //顏色表長度(多少個表項)</p><p>  protected:</p><p>  int m_imgWidth; //圖像的寬,像素為單位</p><p>  int m_imgHeight; //圖像的高,像素為單位</p><p>  LPBITMAPINFOHEADER m_lpBmpInfoHead; //圖像信息頭

40、指針</p><p><b>  public:</b></p><p>  ImgCenterDib();//不帶參數(shù)的構(gòu)造函數(shù)</p><p>  ImgCenterDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable, </p><p>  unsigned c

41、har *pImgData); //帶參數(shù)的構(gòu)造函數(shù)</p><p>  ~ImgCenterDib();//析構(gòu)函數(shù)</p><p>  CSize GetDimensions();//獲取DIB的尺寸(寬高)</p><p>  BOOL Read(LPCTSTR lpszPathName); //DIB讀函數(shù)</p><p>  BOO

42、L Write(LPCTSTR lpszPathName); //DIB寫函數(shù)</p><p>  BOOL Draw(CDC* pDC, CPoint origin, CSize size); //顯示DIB</p><p>  void ReplaceDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable,</p>&

43、lt;p>  unsigned char *pImgData); //用新的數(shù)據(jù)替換DIB</p><p>  int ComputeColorTabalLength(int nBitCount); //計算顏色表的長度</p><p><b>  private:</b></p><p>  void MakePalette();//創(chuàng)

44、建邏輯調(diào)色板</p><p>  void Empty();//清理空間 };</p><p>  同時將各個模塊函數(shù)封裝起來成為一個類,這些類都以ImgCenterDib類共有繼承,在主程序中調(diào)用,減少代碼的重復性,提高利用率。派生關(guān)系如圖4.1:</p><p>  圖4.1 基類與派生類結(jié)構(gòu)關(guān)系圖</p><p>  4.2 各模

45、塊的詳細設計</p><p>  4.2.1歡迎界面設計</p><p>  用photoshop軟件根據(jù)內(nèi)容的需要處理一張圖片,并保存為.bmp格式,然后在Microsoft Visual C++ 6.0中載入該圖片。</p><p>  設計思想:歡迎界面在程序運行時是以圖形式顯現(xiàn)的,這里要封裝一個位圖的類Cbtmap(派生于位圖類CBitmap),獲取圖像的寬

46、,高,創(chuàng)建邏輯調(diào)色板等等;之后創(chuàng)建一個啟動窗口類,名為Csplash(派生于窗口基類CWnd),這兩個類均封裝了一些函數(shù),它們之間通過參數(shù)傳遞和函數(shù)調(diào)用,在主程序代碼中聲明Splash類的對象,調(diào)用Csplash類中函數(shù)從而實現(xiàn)設計目標。</p><p>  啟動窗口類的主要代碼如下:</p><p>  class Csplash : public CWnd{ public:&#

47、160;   Csplash();//構(gòu)造函數(shù) public:    void Create( UINT nBitmapID );//調(diào)用CreateEx創(chuàng)建窗口 public:    virtual ~Csplash();//析構(gòu)函數(shù) protected:    //{{AFX_MSG(CW

48、zdSplash)    afx_msg void OnPaint();    //}}AFX_MSG    DECLARE_MESSAGE_MAP() private:    Cbtmap m_bitmap;//私有成員變量};</p><p>  位圖類的主要代碼如下:&l

49、t;/p><p>  class Cbtmap : public CBitmap{ public:    DECLARE_DYNAMIC(Cbtmap) Cbtmap(); void LoadBitmapEx(UINT nID, BOOL bIconBkgrd );    CPalette *GetPalette(){r

50、eturn m_pPalette;}; public:    virtual ~Cbtmap(); int m_Width;    int m_Height; private:    CPalette *m_pPalette; };</p><p>  在CPicture_sysView:

51、:CPicture_sysView()函數(shù)中加入如下代碼:</p><p>  Csplash wndSplash; //聲明Splash類的對象wndSplash.Create(IDB_WZDSPLASH); //調(diào)用Create()wndSplash.UpdateWindow();Sleep(2000);//定時2秒</p><p>  程序運行截圖如下:(歡迎界面)</

52、p><p>  4.2.2主界面設計</p><p><b> ?。?)文件操作模塊</b></p><p>  文件操作模塊是整個系統(tǒng)中最基本的組成成分,該模塊主要實現(xiàn)圖像的文件操作,包括新建操作,打開操作.保存操作,另存為操作,關(guān)閉操作,打印操作。</p><p>  通過對用戶的需求分析得出文件操作模塊的功能結(jié)構(gòu)圖,文

53、件操作模塊的功能結(jié)構(gòu)圖如圖4.2所示: </p><p>  圖 4.2 文件操作模塊功能結(jié)構(gòu)圖</p><p>  在文件操作模塊,新建操作,關(guān)閉操作和圖像打印操作可以直接調(diào)用系統(tǒng)提供的不需要重載的函數(shù)很容易就實現(xiàn),其他操作都需要將文件下的.bmp格式的圖像數(shù)據(jù)讀進計算機內(nèi)存中生成DIB, 存放在m_lpDib(指向DIB的指針)所指向的緩沖區(qū)。</p><p>

54、  文件打開操作的偽代碼描述如下所示: 文件的另存為操作偽代碼如下:</p><p><b>  功能截圖如下:</b></p><p><b>  菜單欄:</b></p><p><b>  另存為操作:</b></p><p><b> ?。?)特效顯示模塊&l

55、t;/b></p><p>  特效顯示模塊實現(xiàn)了圖像在視圖中的顯示方式,包括自上而下掃描顯示,從左至右的滑動顯示和漸進顯示。經(jīng)過分析圖像特效顯示功能,得出圖像處理的功能模塊圖如圖4.3所示:</p><p>  圖4.3特效顯示模塊功能結(jié)構(gòu)圖</p><p>  特效顯示類SpecialEffectShow是在基類ImgCenterDib基礎上派生出來的,特

56、效顯示類設計代碼如下:</p><p>  class SpecialEffectShow : public ImgCenterDib </p><p>  { public:</p><p>  SpecialEffectShow(CSize size, int nBitCount, </p><p>  LPRGBQUAD lpCo

57、lorTable, unsigned char *pImgData); </p><p>  //帶參數(shù)的構(gòu)造函數(shù) void Scan(CDC*pDC);//掃描特效顯示</p><p>  void Slide(CDC*pDC);//滑動特效顯示</p><p>  void FadeIn(CDC * pDC);//漸進特效顯示</p>&l

58、t;p>  virtual ~SpecialEffectShow();</p><p>  protected:</p><p>  SpecialEffectShow();//防止從外部訪問無參數(shù)的構(gòu)造函數(shù)</p><p><b>  };</b></p><p>  利用類向?qū)?,給相應的控件定義消息處理函數(shù),如

59、下表</p><p>  表1 主要的消息處理函數(shù)表</p><p>  在picture_sysView.cpp重載消息處理函數(shù),這三個消息處理函數(shù)代碼基本相似,共同操作偽代碼如下:</p><p><b>  功能截圖如下:</b></p><p>  掃描顯示:

60、 滑動顯示:</p><p><b>  漸進顯示</b></p><p> ?。?)圖像灰度變換模塊</p><p>  圖像灰度變換模塊實現(xiàn)了彩色圖像變灰度格式,灰度圖像變彩色格式和二值化操作。經(jīng)過分析圖像灰度變換功能,得出圖像處理的功能模塊圖如圖4.4所示:</p><p>  圖4.4 灰度變換模塊功能結(jié)構(gòu)圖

61、</p><p>  灰度變換類GrayTrans是在基類ImgCenterDib基礎上派生出來的, 灰度變換類設計代碼如下:</p><p>  class GrayTrans:public ImgCenterDib</p><p><b>  {</b></p><p><b>  public:</

62、b></p><p>  int m_nBitCountOut; //輸出圖像每像素位數(shù)</p><p>  unsigned char * m_pImgDataOut; //輸出圖像位圖數(shù)據(jù)指針</p><p>  LPRGBQUAD m_lpColorTableOut; //輸出圖像顏色表</p><p><b>  pr

63、ivate:</b></p><p>  int m_imgWidthOut; //圖像的寬,像素為單位</p><p>  int m_imgHeightOut; //圖像的高 </p><p>  int m_nColorTableLengthOut; //輸出圖像顏色表長度</p><p><b>  public

64、:</b></p><p>  GrayTrans();//不帶參數(shù)的構(gòu)造函數(shù)</p><p>  GrayTrans(CSize size, int nBitCount, LPRGBQUAD lpColorTable, </p><p>  unsigned char *pImgData); //帶參數(shù)的構(gòu)造函數(shù)</p><p>

65、;  ~GrayTrans();</p><p>  CSize GetDimensions();//以像素為單位返回輸出圖像的寬和高</p><p>  void ColorToGray();//彩色變灰度格式</p><p>  void GrayToColor();//灰度變彩色格式</p><p>  void Binary(int

66、 threshold=128); //二值化</p><p><b>  };</b></p><p>  利用類向?qū)Вo相應的控件定義消息處理函數(shù),如下表</p><p>  表2 主要的消息處理函數(shù)表</p><p>  在picture_sysView.cpp重載消息處理函數(shù),這三個消息處理函數(shù)代碼基本相似,共同

67、操作偽代碼如下:</p><p><b>  功能截圖如下:</b></p><p>  彩色變灰度格式: </p><p><b>  灰度變彩色格式:</b></p><p><b>  二值化:</b></p><

68、p>  (4)圖像鏡像與旋轉(zhuǎn)模塊</p><p>  圖像鏡像與旋轉(zhuǎn)模塊實現(xiàn)了圖像的鏡像變換和圖像旋轉(zhuǎn)顯示,包括水平鏡像,垂直鏡像,順時針旋轉(zhuǎn)90度,逆時針旋轉(zhuǎn)90度,圖像旋轉(zhuǎn)180度。其功能模塊圖如圖4.5所示:</p><p><b>  圖</b></p><p>  4.5 圖像鏡像與旋轉(zhuǎn)模塊功能結(jié)構(gòu)圖</p>&

69、lt;p>  鏡像與旋轉(zhuǎn)類GeometryTrans是在基類ImgCenterDib基礎上派生出來的。該類與灰度變換類GrayTrans有相同的成員變量,其成員函數(shù)除CSize GetDimensions()函數(shù)外變?yōu)?</p><p>  GeometryTrans();</p><p>  GeometryTrans(CSize size, int nBitCount, LPRG

70、BQUAD lpColorTable, unsigned char *pImgData); //帶參數(shù)的構(gòu)造函數(shù)</p><p>  ~GeometryTrans();</p><p>  void Move(int offsetX, int offsetY); //平移</p><p>  void MirrorHori();//水平鏡像</p>&

71、lt;p>  void MirrorVerti();//垂直鏡像</p><p>  void Clockwise90();//順時針旋轉(zhuǎn)90度</p><p>  void Anticlockwise90();//逆時針旋轉(zhuǎn)90度</p><p>  void Rotate180();//旋轉(zhuǎn)180</p><p>  利用類向?qū)?,給

72、相應的控件定義消息處理函數(shù),如下表</p><p>  表3 主要的消息處理函數(shù)表</p><p>  在picture_sysView.cpp重載消息處理函數(shù),這五個消息處理函數(shù)代碼基本相似,共同操作偽代碼如下:</p><p><b>  功能截圖如下:</b></p><p>  水平鏡像:

73、 垂直鏡像:</p><p>  順時針旋轉(zhuǎn)90度: 逆時針旋轉(zhuǎn)90度: </p><p><b>  旋轉(zhuǎn)180度:</b></p><p>  (5)圖像增強處理模塊</p><p>  圖像增強處理模塊主要實現(xiàn)了圖像銳化效果,是模糊的圖像變得更加清晰

74、,顏色變得鮮明突出,更適合人眼觀察和識別。</p><p>  圖像增強處理類Pic_Enhance是在基類ImgCenterDib基礎上派生出來的, 圖像增強處理類設計代碼如下:</p><p>  class Pic_Enhance:public ImgCenterDib </p><p>  { public:</p><p> 

75、 int m_nBitCountOut;</p><p>  unsigned char * m_pImgDataOut;</p><p>  LPRGBQUAD m_lpColorTableOut;</p><p>  int m_nColorTableLengthOut;</p><p><b>  public:</b&

76、gt;</p><p>  Pic_Enhance();</p><p>  Pic_Enhance(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData);</p><p>  ~Pic_Enhance();</p><p>  void Gra

77、dSharp(BYTE bThre); //梯度銳化</p><p><b>  };</b></p><p>  利用類向?qū)?,給相應的控件定義消息處理函數(shù),如下表</p><p>  表4 主要的消息處理函數(shù)表</p><p>  在picture_sysView.cpp重載消息處理函數(shù),偽代碼敘述如下:</p

78、><p><b>  功能截圖如下:</b></p><p>  (6) 圖像邊緣檢測模塊</p><p>  圖像邊緣檢測模塊實現(xiàn)了圖像邊緣輪廓檢測, 包括羅伯茨算子邊緣檢測,圖像輪廓提取,其功能模塊圖如圖4.6所示:</p><p>  圖4.6圖像邊緣檢測模塊功能結(jié)構(gòu)圖</p><p>  圖像

79、邊緣檢測類Pic_Segment是在基類ImgCenterDib基礎上派生出來的。該類與灰度變換類GrayTrans有相同的成員變量,其成員函數(shù)除CSize GetDimensions()函數(shù)相同,其他的成員函數(shù)如下:</p><p>  Pic_Segment();</p><p>  Pic_Segment(CSize size, int nBitCount, LPRGBQUAD lp

80、ColorTable, </p><p>  unsigned char *pImgData); //帶參數(shù)的構(gòu)造函數(shù)</p><p>  ~Pic_Segment();</p><p>  void Roberts();//Roberts算</p><p>  void ContourExtract();//輪廓提取</p>

81、<p>  利用類向?qū)Вo相應的控件定義消息處理函數(shù),如下表</p><p>  表5 主要的消息處理函數(shù)表</p><p>  序號 ID號 消息處理函數(shù) 函數(shù)功能</p><p>  1 ID_Roberts On Roberts 羅伯茨算子</p><p>  2 ID_Outlin

82、e On Outline 輪廓提取</p><p>  在picture_sysView.cpp重載消息處理函數(shù),這2個消息處理函數(shù)代碼基本相似,共同操作偽代碼敘述如下:</p><p><b>  功能截圖如下:</b></p><p><b>  羅伯茨算子:</b></p><p>

83、;<b>  輪廓提取:</b></p><p><b>  5 結(jié)論與心得體會</b></p><p>  這次課程設計是以Microsoft Visual C++ 6.0 文檔視圖編程為基礎實現(xiàn)的,這就要求對MFC文檔視圖操作有一定的了解和操作編程能力,在做課程設計前,我查閱了該方面相關(guān)的書籍,對我完成歡迎界面和主界面的設計有很大的幫助。編程

84、中在不同類之間函數(shù)參數(shù)和變量的傳遞和函數(shù)的調(diào)用出了問題,但是理清函數(shù)的編譯編譯順序和變量的類型這些問題都逐一解決,同時增強了對工具欄,菜單欄的手動操作能力。</p><p>  另外一點是對.bmp圖像處理的實現(xiàn),數(shù)字圖像處理關(guān)鍵是算法的設計思想和算法的實現(xiàn),通過這次課程設計,使我了解到了算法設計的重要性(算法設計是編程實現(xiàn)的前提),提高了自己動手編程的能力和汲取一些先進算法的思想,這對以后圖像處理的深入學習大有

85、幫助。</p><p>  該數(shù)字圖像界面是基于Microsoft Visual C++ 6.0的MFC多文檔實現(xiàn)的,在界面設計上看起來過于單調(diào),界面設計簡單,但易于操作; Visual C++ 6.0的MFC對話框的編程是界面看起來更加美觀,更接近軟件系統(tǒng),給人不一樣的感覺,提高了工具欄和菜單欄的編程實現(xiàn)難度和設計的復雜度,這是今后學習的方向。</p><p><b>  6.

86、參考文獻</b></p><p>  [1] 鄭莉 董淵 張瑞豐, C++語言程序設計(第三版), 清華大學出版社 2003</p><p>  [2]David J.Kruglinski(美)等, Visual C++ 6.0技術(shù)內(nèi)幕,北京希望電子出版社,2002</p><p>  [3]謝鳳英 趙丹培, Visual C++ 數(shù)字圖像處理,電子

87、工業(yè)出版社,2008</p><p>  [4]求是科技 張宏林,精通Visual C++ 數(shù)字圖像處理典型算法及實現(xiàn),人民郵電出版社,2008</p><p>  [5]劉銳寧 宋坤等, Visual C++從入門到精通,清華大學出版社,2008</p><p><b>  關(guān)鍵源代碼:</b></p><p>  

88、///////////////////////ImgCenterDib.cpp////////////////////////////////////</p><p>  ImgCenterDib::ImgCenterDib() //缺省變量的構(gòu)造函數(shù)</p><p>  { m_lpDib=NULL;//初始化m_lpDib為空。</p><p>  m_lp

89、ColorTable=NULL;//顏色表指針為空</p><p>  m_pImgData=NULL; // 圖像數(shù)據(jù)指針為空</p><p>  m_lpBmpInfoHead=NULL; // 圖像信息頭指針為空</p><p>  m_hPalette = NULL;//調(diào)色板為空</p><p><b>  }<

90、/b></p><p>  ImgCenterDib::ImgCenterDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable,</p><p>  unsigned char *pImgData)</p><p>  { if(pImgData==NULL){//沒有位圖數(shù)據(jù)傳入,DIB為空</p

91、><p>  m_lpDib=NULL;</p><p>  m_lpColorTable=NULL;</p><p>  m_pImgData=NULL; </p><p>  m_lpBmpInfoHead=NULL; </p><p>  m_hPalette = NULL;</p><p>

92、<b>  }</b></p><p><b>  else{</b></p><p>  m_imgWidth=size.cx;</p><p>  m_imgHeight=size.cy;</p><p>  m_nBitCount=nBitCount;</p><p>

93、  m_nColorTableLength=ComputeColorTabalLength(nBitCount);//根據(jù)每像素位數(shù),計算顏色表長度</p><p>  int lineByte=(m_imgWidth*nBitCount/8+3)/4*4;</p><p>  int imgBufSize=m_imgHeight*lineByte;//位圖數(shù)據(jù)緩沖區(qū)的大?。▓D像大小)&l

94、t;/p><p>  m_lpDib=new BYTE [sizeof(BITMAPINFOHEADER) + </p><p>  sizeof(RGBQUAD) * m_nColorTableLength+imgBufSize];//為m_lpDib一次性分配內(nèi)存,生成DIB結(jié)構(gòu)</p><p>  //填寫B(tài)ITMAPINFOHEADER結(jié)構(gòu)</p>

95、<p>  m_lpBmpInfoHead = (LPBITMAPINFOHEADER) m_lpDib;</p><p>  m_lpBmpInfoHead->biSize = sizeof(BITMAPINFOHEADER);</p><p>  m_lpBmpInfoHead->biWidth = m_imgWidth;</p><p>

96、;  m_lpBmpInfoHead->biHeight = m_imgHeight;</p><p>  m_lpBmpInfoHead->biPlanes = 1;</p><p>  m_lpBmpInfoHead->biBitCount = m_nBitCount;</p><p>  m_lpBmpInfoHead->biCompr

97、ession = BI_RGB;</p><p>  m_lpBmpInfoHead->biSizeImage = 0;</p><p>  m_lpBmpInfoHead->biXPelsPerMeter = 0;</p><p>  m_lpBmpInfoHead->biYPelsPerMeter = 0;</p><p&g

98、t;  m_lpBmpInfoHead->biClrUsed = m_nColorTableLength;</p><p>  m_lpBmpInfoHead->biClrImportant = m_nColorTableLength;</p><p>  m_hPalette = NULL;</p><p>  if(m_nColorTableLeng

99、th!=0){ //若有顏色表,則將顏色表拷貝進DIB的顏色表位置</p><p>  m_lpColorTable=(LPRGBQUAD)(m_lpDib+sizeof(BITMAPINFOHEADER));</p><p>  memcpy(m_lpColorTable,lpColorTable,</p><p>  sizeof(RGBQUAD) * m_nC

100、olorTableLength);//顏色表拷貝</p><p>  MakePalette();//創(chuàng)建邏輯調(diào)色板</p><p><b>  }</b></p><p>  m_pImgData = (LPBYTE)m_lpDib+sizeof(BITMAPINFOHEADER)+</p><p>  sizeof

101、(RGBQUAD) * m_nColorTableLength;//用m_pImgData指向DIB位圖數(shù)據(jù)起始位置</p><p>  memcpy(m_pImgData,pImgData,imgBufSize);//拷貝圖像數(shù)據(jù)進DIB位圖數(shù)據(jù)區(qū)</p><p><b>  }</b></p><p><b>  }</b&

102、gt;</p><p>  ImgCenterDib::~ImgCenterDib()//析構(gòu)函數(shù),釋放資源</p><p>  {if(m_lpDib != NULL) </p><p>  delete [] m_lpDib; </p><p>  if(m_hPalette != NULL)</p><p>  

103、::DeleteObject(m_hPalette);//如果有調(diào)色板,釋放調(diào)色板</p><p><b>  }</b></p><p>  BOOL ImgCenterDib::Draw(CDC* pDC, CPoint origin, CSize size)//顯示DIB位圖</p><p>  { HPALETTE hOldPal=N

104、ULL;//舊的調(diào)色板句柄</p><p>  if(m_lpDib == NULL) return FALSE;</p><p>  if(m_hPalette != NULL)</p><p>  {hOldPal=::SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE);}</p><p

105、>  pDC->SetStretchBltMode(COLORONCOLOR);//設置位圖伸縮模式</p><p>  ::StretchDIBits(pDC->GetSafeHdc(), origin.x, origin.y, size.cx, size.cy,</p><p>  0, 0, m_lpBmpInfoHead->biWidth, m_lpBmpI

106、nfoHead->biHeight,m_pImgData,</p><p>  (LPBITMAPINFO) m_lpBmpInfoHead, DIB_RGB_COLORS, SRCCOPY);//將DIB在pDC所指向的設備上進行顯示</p><p>  if(hOldPal!=NULL)</p><p>  ::SelectPalette(pDC->

107、GetSafeHdc(), hOldPal, TRUE);//恢復舊的調(diào)色板</p><p>  return TRUE;</p><p><b>  }</b></p><p>  BOOL ImgCenterDib::Read(LPCTSTR lpszPathName)//讀入bmp位圖</p><p>  {

108、CFile file;</p><p>  if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite))</p><p>  return FALSE;</p><p>  BITMAPFILEHEADER bmfh;</p><p>  try { Empty(

109、);//清理空間</p><p>  int nCount=file.Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));//讀取BITMAPFILEHEADER結(jié)構(gòu)到變量bmfh中</p><p>  if(nCount != sizeof(BITMAPFILEHEADER)) {</p><p>  throw

110、new CException;}</p><p>  if(bmfh.bfType != 0x4d42) {</p><p>  throw new CException;</p><p><b>  }</b></p><p>  if(m_lpDib!=NULL)</p><p>  dele

111、te []m_lpDib;</p><p>  m_lpDib=new BYTE[file.GetLength() -sizeof(BITMAPFILEHEADER)];</p><p>  file.Read(m_lpDib, file.GetLength() -sizeof(BITMAPFILEHEADER));</p><p>  m_lpBmpInfoHea

112、d = (LPBITMAPINFOHEADER)m_lpDib;</p><p>  m_imgWidth=m_lpBmpInfoHead->biWidth;//為成員變量賦值</p><p>  m_imgHeight=m_lpBmpInfoHead->biHeight;</p><p>  m_nBitCount=m_lpBmpInfoHead-&g

113、t;biBitCount; </p><p>  m_nColorTableLength=</p><p>  ComputeColorTabalLength(m_lpBmpInfoHead->biBitCount);//計算顏色表長度</p><p>  m_hPalette = NULL;//生成邏輯調(diào)色板</p><p>  if

114、(m_nColorTableLength!=0){</p><p>  m_lpColorTable=(LPRGBQUAD)(m_lpDib+sizeof(BITMAPINFOHEADER));</p><p>  MakePalette();</p><p><b>  }</b></p><p>  m_pImgDa

115、ta = (LPBYTE)m_lpDib+sizeof(BITMAPINFOHEADER) +</p><p>  sizeof(RGBQUAD) * m_nColorTableLength;</p><p><b>  }</b></p><p>  catch(CException* pe) {</p><p>  

116、AfxMessageBox("Read error");</p><p>  pe->Delete();</p><p>  return FALSE;}</p><p>  return TRUE;</p><p><b>  }</b></p><p>  BOOL

117、ImgCenterDib::Write(LPCTSTR lpszPathName)//DIB數(shù)據(jù)存盤</p><p>  { CFile file;</p><p>  if (!file.Open(lpszPathName, CFile::modeCreate | CFile::modeReadWrite </p><p>  | CFile::shareEx

118、clusive))</p><p>  return FALSE;</p><p>  BITMAPFILEHEADER bmfh;//填寫文件頭結(jié)構(gòu)</p><p>  bmfh.bfType = 0x4d42; // 'BM'</p><p>  bmfh.bfSize = 0;</p><p>

溫馨提示

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

評論

0/150

提交評論