MFC圖像變換系統(tǒng)的設(shè)計與實現(xiàn)畢業(yè)論文_第1頁
MFC圖像變換系統(tǒng)的設(shè)計與實現(xiàn)畢業(yè)論文_第2頁
MFC圖像變換系統(tǒng)的設(shè)計與實現(xiàn)畢業(yè)論文_第3頁
MFC圖像變換系統(tǒng)的設(shè)計與實現(xiàn)畢業(yè)論文_第4頁
MFC圖像變換系統(tǒng)的設(shè)計與實現(xiàn)畢業(yè)論文_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 . 理工學院本科生畢業(yè)設(shè)計(論文)MFC圖像變換系統(tǒng)的設(shè)計與實現(xiàn)Designand Implementation of The ImageTransform Software on MFC System總計:畢業(yè)設(shè)計(論文)40 頁插 圖 : 30 幅31 / 36MFC圖像變換軟件的設(shè)計與實現(xiàn)軟件工程 摘 要 隨著科學技術(shù)的不斷發(fā)展,計算機的更新速度不斷提高,人們的思想文化素質(zhì)的提高,對圖像的要求也越來越高。本軟件實現(xiàn)圖像的圖像底片化、圖片灰度化、水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)、負像等。圖像的變換是很常見的處理方式,通過對圖像的顯示方式或者圖像數(shù)據(jù)進行處理來實現(xiàn)不同的圖像特效。本系統(tǒng)主要是面向BMP格

2、式的24位圖像,本程序利用MFC編程技術(shù),首先建立一個基于單文檔的應(yīng)用程序,添加子菜單按鈕,分別實現(xiàn)各個特效功能。程序運行后,首先打開一個24位的BMP格式圖像,選擇實現(xiàn)不同的功能按鈕。關(guān)鍵詞 BMP圖像 MFC Visual C+ 水平翻轉(zhuǎn) 垂直翻轉(zhuǎn) 灰度化 放大 縮小 底片化Designand Implementation of The ImageTransform Software on MFC SystemThe major of software engineering Li YuanyuanAbstract:With the development of science and t

3、echnology, update speed computer continues to improve, peoples ideological and cultural qualities, the image are increasingly high requirements. The software implementation of the image, the picture negatives of gray, flip horizontal flip vertical, negative, etc.Image transform approach is very comm

4、on, through or image data processing to achieve image effects to different display of the image. The system is mainly to 24 bit image based on BMP format, the program uses the MFC programming technology, first build an application based on a single document, Ka Ko the menu button, implementation of

5、each specific function. After the program is running, first open a BMP format image 24, choice of different functional buttons.Key words:BMP Image MFC Visual C+ Flip HorizontalFlip verticalGrayAmplificationNegative目 錄1 緒論111 研究的背景112國外現(xiàn)狀113研究的意義11.4 論文結(jié)構(gòu)22 關(guān)鍵技術(shù)321 Visual C+3211 Visual C+簡述3212 MFC的簡

6、介3213 將Visual C+應(yīng)用于數(shù)字圖像的幾何變換422 BMP圖形和BMP文件結(jié)構(gòu)4221 BMP文件結(jié)構(gòu)4222 BMP圖像的讀寫72.3圖像變化的基本形式8231 圖像的平移8232 圖像的旋轉(zhuǎn)9233 圖像的縮放93 需求分析1131系統(tǒng)設(shè)計目標1132需求分析結(jié)果1133可行性分析12331經(jīng)濟可行性12332操作可行性124 概要設(shè)計1341 功能模塊概述1342圖像顯示模塊1443圖像翻轉(zhuǎn)模塊1444圖像瀏覽模塊1445圖像特效處理模塊155 詳細設(shè)計與系統(tǒng)實現(xiàn)1651圖像顯示模塊的設(shè)計1652圖像翻轉(zhuǎn)模塊17521水平翻轉(zhuǎn)17522垂直翻轉(zhuǎn)1953圖像瀏覽模塊21531圖

7、像放大21532圖像縮小2254圖像特效處理22541圖像灰度化處理23542圖像負像246系統(tǒng)運行與總結(jié)2761圖像打開2762水平翻轉(zhuǎn)2763垂直翻轉(zhuǎn)2864圖像放大2865圖像縮小2966圖像灰度2967圖像負像307結(jié)束語31參考文獻32致331 緒論11 研究的背景 圖像時現(xiàn)代信息社會中最基本的信息。數(shù)字圖像處理的研究對象是圖像處理技術(shù),這是計算機技術(shù)的重要分支和發(fā)展方向。數(shù)字圖像處理時信息科學、工程學、醫(yī)學、生理學、甚至社會科學等許多學科的重要基礎(chǔ),同時也是一種具有巨大的經(jīng)濟和社會效益的使用技術(shù),廣泛應(yīng)用于軍事、氣象、交通、探礦、水利、農(nóng)業(yè)甚至娛樂等領(lǐng)域。隨著信息高速公路和數(shù)字地球

8、等概念的提出和發(fā)展,數(shù)字圖像處理技術(shù)已得到更加充分的發(fā)展,并在現(xiàn)代信息社會中占據(jù)了非常重要的低位。隨著圖像處理技術(shù)的廣泛應(yīng)用,學習和掌握這門科學顯得格外重要,圖像處理已經(jīng)成為信息技術(shù)相關(guān)領(lǐng)域的核心課程。12國外現(xiàn)狀隨著科學技術(shù)的不斷發(fā)展,計算機的更新速度不斷提高,人們的思想文化素質(zhì)的提高,對圖像的要求也越來越高。因此把原始圖像與計算機結(jié)合起來,從而創(chuàng)作出許多更加完美的圖像,滿足人們的需求。計算機圖像處理,是指利用計算機對圖像進行一系列加工,以便獲得人所們需要的效果。圖像是人類獲取和交換信息的主要來源,人類感知外界信息,80%以上是通過視覺得到的。因此,圖像處理的應(yīng)用領(lǐng)域必然涉與到人類生活和工作

9、的方方面面。圖像處理或圖像分析方法的應(yīng)用越來越廣泛,其主要理論基礎(chǔ)是形態(tài)數(shù)學,立體學,集合論等。圖像處理雖然也可以用光學方法或模擬技術(shù)來實現(xiàn),但目前主要是利用計算機來實現(xiàn),稱為數(shù)字圖像處理。因此,圖像處理一般是指數(shù)字圖像處理。常見的圖像處理有圖像數(shù)字化、圖像編碼、圖像增強、圖像復原、圖像分割與圖像分析等。經(jīng)過處理后的圖像,一定能夠更好的被用于工業(yè)或者個人目的。為此開發(fā)這個數(shù)字圖像處理軟件,能夠處理一些圖像,并對圖像處理技術(shù)此方面進行深入的研究。13研究的意義圖像處理學是一門綜合性邊緣學科。從研究圍來看,它與計算機圖形學、模式識別、計算機視覺等既有聯(lián)系又有區(qū)別。圖形學原本指用圖形、圖表、繪圖等形

10、式表達數(shù)據(jù)信息的科學。而計算機圖形學研究的是如何利用計算機技術(shù)來產(chǎn)生這些形式。和圖像分析對比,兩者的處理對象和輸出結(jié)果正好相反。計算機圖形學試圖從非圖像形式的數(shù)據(jù)描述來生成圖像。另一方面,模式識別與圖像分析則比較相似,只是前者試圖把圖像抽象成符號描述的類別,它們有一樣的輸入,而不同的輸出結(jié)果之間可較方便的進行轉(zhuǎn)換。至于計算機視覺主要強調(diào)用計算機去實現(xiàn)人的視覺功能,其中涉與圖像處理的許多技術(shù),但目前的研究容主要與圖像理解相結(jié)合。由此看來,以上學科相互聯(lián)系,相互交叉,它們之間并沒有絕對的界限。雖各有側(cè)重但又相互補充。另外以上各學科都得到了人工智能、神經(jīng)網(wǎng)絡(luò)、遺傳算法、模糊邏輯等新理論、新工具、新技

11、術(shù)的支持,所以它們又都在近年得到了長足發(fā)展。在計算機出現(xiàn)之前,模擬圖像處理占主導地位。隨著計算機的發(fā)展,數(shù)字圖像處理發(fā)展速度越來越快。與人類對視覺機能著迷的歷史相比,它是一門相對年輕的學科。盡管目前一般采用順序處理的計算機,對大數(shù)據(jù)量的圖像處理速度不如光學方法快,但是其處理的精度高,實現(xiàn)多種功能的、高度復雜的運算求解非常靈活方便。在其短短的歷史中,它卻成功的應(yīng)用于幾乎所有與成像有關(guān)的領(lǐng)域,并正發(fā)揮相當重要的作用。 1.4 論文結(jié)構(gòu)本文共分為6章,各章主要容介紹如下:第一章首先簡單介紹課題研究的背景,國外的發(fā)展狀況、本系統(tǒng)研究的主要意義以與本論文的組織結(jié)構(gòu)。第二章主要介紹系統(tǒng)開發(fā)的平臺,以與主要

12、關(guān)鍵技術(shù)如:Visual C+、BMP圖形和BMP文件結(jié)構(gòu)、圖像變化的基本形式等。第三章主要介紹本系統(tǒng)的系統(tǒng)設(shè)計目標、需求分析結(jié)果、可行性分析。第四章主要介紹課題的功能模塊設(shè)計以與詳細設(shè)計過程。先做出整體功能模塊圖,再對各功能模塊進行概述,最后介紹個模塊的流程圖。第五章主要介紹系統(tǒng)主要編碼與實現(xiàn)過程。第六章主要介紹系統(tǒng)運行與總結(jié)。2 關(guān)鍵技術(shù)21 Visual C+211 Visual C+簡述Visual C+(簡稱VC)是微軟公司提供的基于C/C+的應(yīng)用程序集成開發(fā)工具。VC擁有豐富的功能和大量的擴展庫,使用它能有效的創(chuàng)建高性能的Windows應(yīng)用程序和Web應(yīng)用程序。VC的優(yōu)越性主要表現(xiàn)

13、在以下幾個方面: 開發(fā)分布式應(yīng)用。 開發(fā)的應(yīng)用程序運行效率高、具有健壯性。 能縮短軟件升級周期。 能夠生成多線程應(yīng)用,而多線程應(yīng)用對于增加并發(fā)響應(yīng)有實際意義。VC除了提供高效的C/C+編譯器外,還提供了大量的可重用類和組件,包括著名的微軟基礎(chǔ)類庫(MFC)和活動模板類庫(ATL),因此它是軟件開發(fā)人員不可多得的開發(fā)工具。VisualC+6.0是功能最為強大的可視化開發(fā)工具之一,它不僅支持傳統(tǒng)的軟件開發(fā)方法,更重要的是它能支持面向?qū)ο蟆⒖梢暬拈_發(fā)風格。因此VisualC+6.0又稱作是一個集成開發(fā)工具,它提供了軟件代碼自動生成和可視化的資源編輯功能。VisualC+ 具有多種優(yōu)點:它提供了面向

14、對象的應(yīng)用程序框架MFC(MicrosoftFoundationClass),簡化了程序員的編程工作,提高了模塊的可重用性;提供了基于CASE技術(shù)的可視化軟件的自動生成和維護工具AppWizard、Class Wizard、Visual Studio、Wizard Bar等,實現(xiàn)了直觀、可視的程序設(shè)計風格,方便地編輯和管理各種類,維護程序的源代碼;封裝了Windows的API函數(shù)、USER、KERNEL、GDI函數(shù),簡化了編程時創(chuàng)建、維護窗口的許多復雜的工作。212 MFC的簡介MFC的英文全稱是Microsoft Foundation Class Library,MFC中的各種類結(jié)合起來構(gòu)成

15、了一個應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來建立Windows下的應(yīng)用程序,這是一種相對SDK來說更為簡單的方法。因為總體上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標準實現(xiàn)方法,程序員所要做的就是通過預定義的接口把具體應(yīng)用程序特有的東西填入這個輪廓。Microsoft Visual C+提供了相應(yīng)的工具來完成這個工作:AppWizard可以用來生成初步的框架文件(代碼和資源等);資源編輯器用于幫助直觀地設(shè)計用戶接口;Class Wizard用來協(xié)助添加代碼到框架文件;最后,編譯,則通過類庫實現(xiàn)了應(yīng)用程序特定的邏輯。213 將Visual C+應(yīng)用于數(shù)字圖像的幾何變換VC豐富

16、的功能和大量的擴展庫,類的重用特性以與它對函數(shù)庫、DLL庫的支持能使程序更好的模塊化,并且通過向?qū)С绦虼蟠蠛喕藥熨Y源的使用和應(yīng)用程序的開發(fā),正由于VC具有明顯的優(yōu)勢,因而我選擇了它來作為數(shù)字圖像幾何變換的開發(fā)工具。在本程序的開發(fā)過程中,VC的核心知識、消息映射機制、對話框控件編程等都得到了生動的體現(xiàn)和靈活的應(yīng)用。22 BMP圖形和BMP文件結(jié)構(gòu)221 BMP文件結(jié)構(gòu)BMP圖像文件被分成4個部分:位圖文件頭(Bitmap File Header)、位圖信息頭(Bitmap Info Header)、顏色表(Color Map)和位圖數(shù)據(jù)(即圖像數(shù)據(jù),Data Bits或Data Body)。第

17、1部分為位圖文件頭BITMAPFILEHEADER,是一個結(jié)構(gòu)體類型,該結(jié)構(gòu)的長度是固定的,為14個字節(jié)。其定義如下: typedef struct tagBITMAPFILEHEADERWORD bfType;DWORD bfSize;WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;BITMAPFILEHEADER結(jié)構(gòu)的各個域詳細說明如下:bfType:位圖文件類型,必須是0x424D,即字符串“BM”,也就是說

18、,所有的“*.bmp”文件的頭兩個字節(jié)都是“BM”。bfSize:位圖文件大小,包括這14個字節(jié)。bfReserved1, bfReserved2:Windows保留字,暫不用。bfOffBits:從文件頭到實際的位圖數(shù)據(jù)的偏移字節(jié)數(shù),圖2-1中前3個部分的長度之和。圖2-1 BMP文件結(jié)構(gòu)示意圖第2部分為位圖信息頭BITMAPINFOHEADER,也是一個結(jié)構(gòu)體類型的數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)的長度也是固定的,為40個字節(jié)(WORD為無符號16位整數(shù),DWORD為無符號32位整數(shù),LONG為32位整數(shù))。其定義如下: typedef struct tagBITMAPINFOHEADERDWORD bi

19、Size; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCountDWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed;DWORD biClrImportant; BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;BITMAPINFOHEADER結(jié)構(gòu)的各個域的詳細說明如下:biSize:本結(jié)構(gòu)的長度,為40個字節(jié)。

20、biWidth:位圖的寬度,以像素為單位。biHeight:位圖的高度,以像素為單位。biPlanes:目標設(shè)備的級別,必須是1。biBitCount:每個像素所占的位數(shù)(bit),其值必須為1(黑白圖像)、4(16色圖)、8(256色)、24(真彩色圖),新的BMP格式支持32位色。biCompresssion:位圖壓縮類型,有效的值為BI_RGB(未經(jīng)壓縮)、BI_RLE8、BI_RLE4、BI_BITFILEDS(均為Windows定義常量)。這里只討論未經(jīng)壓縮的情況,即biCompression=BI_RGB。biSizeImage:實際的位圖數(shù)據(jù)占用的字節(jié)數(shù),該值的大小在第4部分位圖

21、數(shù)據(jù)中有具體解釋。biXPelsPerMeter:指定目標設(shè)備的水平分辨率,單位是像素/米。biYPelsPerMeter:指定目標設(shè)備的垂直分辨率,單位是像素/米。biClrUsed:位圖實際用到的顏色數(shù),如果該值為零,則用到的顏色數(shù)為2的biBitCount次冪。biClrImportant:位圖顯示過程中重要的顏色數(shù),如果該值為零,則認為所有的顏色都是重要的。第3部分為顏色表。顏色表實際上是一個RGBQUAD結(jié)構(gòu)的數(shù)組,數(shù)組的長度由biClrUsed指定(如果該值為零,則由biBitCount指定,即2的biBitCount次冪個元素)。RGBQUAD結(jié)構(gòu)是一個結(jié)構(gòu)體類型,占4個字節(jié),其

22、定義如下:typedef struct tagRGBQUADBYTE rgbBlue;BYTE rgbGreen;BYTE rgbRed;BYTE rgbReserved;RGBQUAD;RGBQUAD結(jié)構(gòu)的各個域的詳細說明如下:rgbBlue:該顏色的藍色分量;rgbGreen:該顏色的綠色分量;rgbRed:該顏色的紅色分量;rgbReserved:保留字節(jié),暫不用。第4部分是位圖數(shù)據(jù),即圖像數(shù)據(jù),其緊跟在位圖文件頭、位圖信息頭和顏色表(如果有顏色表的話)之后,記錄了圖像的每一個像素值。對于有顏色表的位圖,位圖數(shù)據(jù)就是該像素顏色在調(diào)色板中的索引值;對于真彩色圖,位圖數(shù)據(jù)就是實際的R、G、B

23、值(三個分量的存儲順序是B、G、R)。下面就2色、16色、256色位圖和真彩色位圖分別介紹。對于2色位圖,用1位就可以表示該像素的顏色(一般0表示黑,1表示白),所以一個字節(jié)可以表示8個像素。對于16色位圖,用4位可以表示一個像素的顏色,所以1個字節(jié)可以表示2個像素。對于256色位圖,1個字節(jié)剛好可以表示1個像素。對于真彩色圖,3個字節(jié)才能表示1個像素。222 BMP圖像的讀寫 2221 BMP圖像的讀:(1)首先定義BMP文件頭和信息頭變量BITMAPFILEHEADER bf; /BMP文件頭結(jié)構(gòu)體BITMAPINFOHEADER bi; /BMP信息頭結(jié)構(gòu)體(2)創(chuàng)建文件輸入流fp fp

24、=fopen(fileName,rb); /fileName為BMP圖像文件名(3)讀取信息頭、文件頭fread(&bf,sizeof(BITMAPFILEHEADER),1,fp); fread(&bi,sizeof(BITMAPINFOHEADER),1,fp);經(jīng)過這兩條程序把BMP圖像的信息頭、文件頭賦給bf和bi變量,可以根據(jù)bf和bi得到圖像的各種屬性。(4) 讀取BMP調(diào)色板fread(ipRGB2,sizeof(RGBQUAD),256,fp); (5)讀取BMP位圖數(shù)據(jù)定義一個二維數(shù)組Imgdata來存取BMP位圖數(shù)據(jù)unsignedchar * * Imgdata; Img

25、data=newunsignedchar*bi.biHeight; /聲明一個指針數(shù)組for ( i=0;ibi.biHeight;i+) Imgdatai=newunsignedchar(bi.biWidth*3+3)/4*4; /每個數(shù)組元素也是一個指針數(shù)組for ( i=0;ibi.biHeight;i+ ) for(j=0;j=0;i-) for (j=0 ;j(bi.biWidth*3+3)/4*4;j+) fwrite(&Imgdataij,1,1,fp); 2.3圖像變化的基本形式圖像的基本變換形式,通常包括圖像的平移、圖像的鏡像變換、圖像的轉(zhuǎn)置、圖像的縮放和圖像的旋轉(zhuǎn)等。231

26、 圖像的平移圖像平移就是將圖像中所有的點都按照指定的平移量水平、垂直移動。設(shè)(x0,y0)為原圖像上的一點,圖像水平平移量為tx,垂直平移量為ty,則平移后點(x0,y0)坐標將變?yōu)椋▁1,y1)。顯然(x0,y0)和(x1,y1)的關(guān)系如下:用矩陣表示如下:對該矩陣求逆,可以得到逆變換: 即這樣,平移后的圖像上的每一點都可以在原圖像中找到對應(yīng)的點。例如,對于新圖中的(0,0)像素,代入上面的方程組,可以求出對應(yīng)原圖中的像素(-tx,-ty)。如果tx或ty大于0,則(- tx,- ty)不在原圖中。對于不在原圖中的點,可以直接將它的像素值統(tǒng)一設(shè)置為0或則255(對于灰度圖就是黑色或白色)。同

27、樣,若有點不在原圖中,也就說明原圖中有點被移出顯示區(qū)域。如果不想丟失被移出的部分圖像,可以將新生成的圖像寬度擴大|tx |,高度擴大| ty |。232 圖像的旋轉(zhuǎn)一般圖像的旋轉(zhuǎn)是以圖像的中心為原點,旋轉(zhuǎn)一定的角度。旋轉(zhuǎn)后,圖像的大小一般會改變。和圖像平移一樣,既可以把轉(zhuǎn)出顯示區(qū)域的圖像截去,也可以擴大圖像圍以顯示所有的圖像??梢酝茖б幌滦D(zhuǎn)運算的變換公式。如下圖所示,點(x0,y0)經(jīng)過旋轉(zhuǎn)度后坐標變成(x1,y1)。在旋轉(zhuǎn)前:旋轉(zhuǎn)后: 寫成矩陣表達式為:233 圖像的縮放圖像的縮放操作將會改變圖像的大小,產(chǎn)生的圖像中的像素可能在原圖中找不到相應(yīng)的像素點,這樣就必須進行近似處理。一般的方法是

28、直接賦值為和它最相近的像素值,也可以通過一些插值算法來計算。假設(shè)圖像x軸方向縮放比率為fx,y軸方向縮放比率為fy,那么原圖中點(x0,y0)對應(yīng)與新圖中的點(x1,y1)的轉(zhuǎn)換矩陣為:其逆運算如下: 即例如,當fx=fy=0.5時,圖像被縮放到一半大小,此時縮小后圖像中的(0,0)像素對應(yīng)于原圖中的(0,0)像素;(0,1)像素對應(yīng)于原圖中的(0,2)像素;(1,0)像素對應(yīng)于原圖中的(2,0)像素,以此類推。在原圖基礎(chǔ)上,每行隔一個像素取一點,每隔一行進行操作。其實是將原圖每行中的像素重復取值一遍,然后每行重復一次。3 需求分析31系統(tǒng)設(shè)計目標需求分析簡單地說就是分析用戶的需求。需求分析是

29、設(shè)計系統(tǒng)的起點,需求分析的結(jié)果是否準確地反映了用戶的實際要求,將直接影響到后面各個階段的設(shè)計,并影響到設(shè)計結(jié)果是否合理和實用。需求分析的任務(wù)是通過詳細調(diào)查現(xiàn)實世界要處理的對象(組織、部門、企業(yè)等),充分了解原系統(tǒng)(手工系統(tǒng)或計算機系統(tǒng))工作概況,明確用戶的各種需求,然后在此基礎(chǔ)上確定新系統(tǒng)的功能。調(diào)查的重點是“數(shù)據(jù)”和“處理”,通過調(diào)查、收集與分析,獲得用戶對數(shù)據(jù)的要求如下:(1)圖像的打開、關(guān)閉與保存:打開并顯示圖像,并在處理過圖像后關(guān)閉或保存圖像的修改。(2)處理要求。指用戶要完成什么處理功能,對處理的響應(yīng)時間有什么要求,處理方式是批處理還是其他處理方式,能夠完成圖像一般的編輯處理。(3)

30、處理效果與效率。圖像處理中一個很重要的問題就是如何表示有關(guān)的知識并以恰當?shù)姆绞揭雸D像處理。由于圖像處理任務(wù)的復雜性,目前要找出一個通用的方法適應(yīng)各種情況是幾乎不可能的。另一方面,在建立普適的圖像處理方法時,往往會忽略某類圖像具有的特定屬性。相反,針對某類特定問題,則可能找到有效的方法。為此,有研究者提出基于對象圖像處理的概念:限定圖像處理的對象為一類特殊的圖像BMP,考察對象的共有屬性(稱為先驗),并將其結(jié)合到圖像處理的任務(wù)中以提供更多的信息,從而提升圖像處理的性能、提高處理效果。由于圖像的處理是通過對一個個像素點進行處理,要想提高處理速度就需要尋找一個快速的處理方法。 本系統(tǒng)是Window

31、s應(yīng)用程序,可以進行圖像的導入和導出,處理后的圖片進行保存,圖像的特效處理以與打印輸出圖片。32需求分析結(jié)果本系統(tǒng)的主要功能有:1. 圖像文件的打開和保存,實現(xiàn)了對24位BMP格式圖像的操作。2. 圖像的復制,實現(xiàn)將位圖像復制到其他的工具中。3. 圖像的放大,實現(xiàn)圖像按照原比例放大顯示,呈現(xiàn)放大效果。4. 圖像的縮小,實現(xiàn)圖像按照原比例縮小顯示,呈現(xiàn)縮小效果。5. 圖像的水平翻轉(zhuǎn),實現(xiàn)對圖像數(shù)據(jù)的左右水平方向的相互轉(zhuǎn)換。6. 圖像的垂直翻轉(zhuǎn),實現(xiàn)對圖像數(shù)據(jù)的垂直上學方向的相互轉(zhuǎn)換。7. 圖像的負像處理,實現(xiàn)對圖像的底片化效果顯示。8. 圖像的灰度化處理,實現(xiàn)對彩色圖像的黑白化處理33可行性分析

32、331經(jīng)濟可行性 即考慮到成本問題,人力管理消耗大量的時間和物資而該系統(tǒng)只需極少部分人的管理且提高效益,這樣就需要在管理中提供一個簡單易操作可行性高的系統(tǒng),也就是本項目所要開發(fā)的管理系統(tǒng)。并且開發(fā)一個小型的管理系統(tǒng)的成本也不高,是完全可以承受的。從這一方面來看,經(jīng)濟上是可行的。332操作可行性該軟件主要是用VisualC+6.0作為系統(tǒng)的開發(fā)工具,軟件開發(fā)高速發(fā)展的今天,技術(shù)發(fā)達,用來實現(xiàn)網(wǎng)絡(luò)軟件開發(fā)的工具很多,我們可以利用這些工具來進行研究。在windows操作系統(tǒng)下利用MFC實現(xiàn)界面化操作,建立基于單文檔的應(yīng)用程序。在添加子菜單完成各項功能。MFC開發(fā)環(huán)境成熟,有龐大的庫函數(shù),有一系列的的

33、規(guī),只需學習后恰當?shù)恼{(diào)用,再需簡單掌握MFC相關(guān)庫函數(shù)就可獲得圖像位圖陣列。從操作技術(shù)上是可行的。4 概要設(shè)計41 功能模塊概述圖像簡單特效與加密處理系統(tǒng)是一個典型的圖像處理軟件,它由圖像顯示、圖像翻轉(zhuǎn)、圖像翻轉(zhuǎn)、圖像瀏覽、圖像特效等模塊組成。1. 圖像顯示模塊該模塊主要是可以打開一個位圖文件即BMP格式的圖像,并能將BMP格式的圖像進行復制到剪貼板上,載將位圖復制在其他工具中的模塊。2. 圖像翻轉(zhuǎn)模式該模塊主要是將位圖圖像進行旋轉(zhuǎn)包括將水平方向翻轉(zhuǎn),垂直方向翻轉(zhuǎn)與順時針90旋轉(zhuǎn)的模塊。3. 圖像瀏覽模塊該模塊主要是可以對位圖進行縮放顯示包括對圖像的按照多大的比例放大和縮小或按照原來大小顯示位

34、圖。4. 圖像特效模塊該模塊主要是對位圖進行一些特效功能處理包括圖像負像、圖片灰度化二個部分。負像就是將圖像轉(zhuǎn)換成底片形式,圖像灰度化就是將彩色轉(zhuǎn)變?yōu)榛叶葓D像時圖像失去色彩。5. 幫助模塊該模塊主要包括軟件的版本、開發(fā)單位等信息。本系統(tǒng)的功能模塊圖設(shè)計如下4.1所示圖4.1 功能模塊圖42圖像顯示模塊圖像復制打開一24位的BMP格式圖像,就能顯示一個BMP格式的圖像,并運行復制功能后,本圖像可以復制在其他的工具中。 如打開一個BMP格式位圖后,在編輯中,點擊“復制”,再打開一個別的工具如文檔,鼠標右擊后選擇“粘貼”,那么這個BMP格式的圖像就顯示在文檔中。43圖像翻轉(zhuǎn)模塊(1)水平翻轉(zhuǎn)打開一2

35、4位的BMP格式的圖像,運行水平翻轉(zhuǎn)功能,點擊垂直翻轉(zhuǎn)子菜單,程序開始處理圖像,處理后的圖像左右兩邊的像素轉(zhuǎn)換過來顯示。(2)垂直翻轉(zhuǎn)打開一24位的BMP格式的圖像,運行圖像垂直翻轉(zhuǎn)功能,點擊垂直翻轉(zhuǎn)子菜單,程序開始處理圖像,處理好的圖像上下兩邊的像素轉(zhuǎn)換過來顯示。44圖像瀏覽模塊(1)圖像放大打開一24位的BMP格式的圖像,運行圖像放大功能,點擊圖像放大子菜單,程序開始處理圖像,處理后的圖像按照原來的比例擴大來顯示。(2)圖像縮小打開一24位的BMP格式的圖像,運行圖像縮小功能,點擊圖像縮小子菜單,程序開始處理圖像,處理后的圖像按照原來的比例縮小來顯示。45圖像特效處理模塊(1)圖像底片化處

36、理打開一24位的BMP格式的圖像,運行圖像底片化處理功能,程序就開始反相圖像,把圖片變成像底片一樣的效果。(2)圖像灰度化處理彩色圖像被灰度化位黑白圖像。在RGB模型中,如果R=G=B時,則彩色表示一種灰度顏色,其中R=G=B的值叫灰度值,因此,灰度圖像每個像素只需一個字節(jié)存放灰度值(又稱強度值、亮度值),灰度圍為0-255。一般有以下四種方法對彩色圖像進行灰度化: 將彩色圖像中的三分量的亮度作為三個灰度圖像的灰度值,可根據(jù)應(yīng)用需要選取一種灰度圖像。 f1(i,j)=R(i,j) f2(i,j)=G(i,j) f3(i,j)=B(i,j) 其中fk(i,j)(k=1,2,3)為轉(zhuǎn)換后的灰度圖像

37、在(i,j)處的灰度值。5 詳細設(shè)計與系統(tǒng)實現(xiàn)在每個功能模塊中都用到了函數(shù),void Invalidate( BOOL bErase = TRUE ),該函數(shù)的作用是使整個窗口客戶區(qū)無效。窗口的客戶區(qū)無效意味著需要重繪,例如,如果一個被其它窗口遮住的窗口變成了前臺窗口,那么原來被遮住的部分就是無效的,需要重繪。這時Windows會在應(yīng)用程序的消息隊列中放置WM_PAINT消息。MFC為 窗口類提供了WM_PAINT的消息處理函數(shù)OnPaint,OnPaint負責重繪窗口。視圖類有一些例外,在視圖類的OnPaint函數(shù)中調(diào)用了 OnDraw函數(shù),實際的重繪工作由OnDraw來完成。參數(shù)bEras

38、e為TRUE時,重繪區(qū)域的背景將被擦除,否則,背景將保持不變。51圖像顯示模塊的設(shè)計圖像顯示模塊是能夠讀取位圖文件以與圖像的復制功能。圖像復制圖像復制就是圖像可以復制在其他的工具中。本功能是將位圖數(shù)據(jù)轉(zhuǎn)化為DIB格式數(shù)據(jù)在復制在剪貼板上。流程見圖5.15-1復制功能流程圖關(guān)鍵代碼:BOOL CDIB:Copy()if (m_lpBits = 0) return FALSE;if (!OpenClipboard(NULL) return FALSE;EmptyClipboard();HGLOBAL hMem;BYTE *lpDib;int nLen = sizeof(BITMAPINFOHEAD

39、ER)+ BYTE_PER_LINE(m_nWidth, m_nBitCount)*m_nHeight;hMem = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, nLen);lpDib = (BYTE *)GlobalLock(hMem);SaveToDib(lpDib);GlobalUnlock(hMem);SetClipboardData(CF_DIB, hMem);CloseClipboard();return TRUE;52圖像翻轉(zhuǎn)模塊521水平翻轉(zhuǎn)水平翻轉(zhuǎn)將圖像水平方向的像素點沿著中間線進行翻轉(zhuǎn),處理過程為:獲得當前設(shè)備指針,指向當前設(shè)備, 定義

40、三個無符號的的指針,為翻轉(zhuǎn)圖像申請一段存空間,大小為圖像存大小。層循環(huán)將每一行的像素點進行翻轉(zhuǎn),左側(cè)的像素移到右側(cè),右側(cè)的像素點移到左側(cè)外層循環(huán)將所有行的像素進行翻轉(zhuǎn)將左側(cè)的像素點移到右側(cè),講右側(cè)的像素點移到左側(cè)。invalidate()函數(shù)進行窗體的重繪。實現(xiàn)過程見圖5.25-2圖像水平翻轉(zhuǎn)流程圖關(guān)鍵代碼:BOOL CDIB:VFlip()if (!m_lpBits) return FALSE;int y, nByteWidth;BYTE *p1, *p2, *pm;nByteWidth = BYTE_PER_LINE(m_nWidth, m_nBitCount);pm = new BYTE

41、nByteWidth;for (y=0; ym_nHeight/2; y+)p1 = m_lpBits+y*nByteWidth;p2 = m_lpBits+(m_nHeight-y-1)*nByteWidth;memcpy(pm, p1, nByteWidth);memcpy(p1, p2, nByteWidth);memcpy(p2, pm, nByteWidth);delete pm;return TRUE;522垂直翻轉(zhuǎn)垂直翻轉(zhuǎn)實現(xiàn)圖像垂直方向的像素對稱翻轉(zhuǎn),處理過程為:獲得當前設(shè)備指針,指向當前設(shè)備, 定義三個無符號的的指針,為翻轉(zhuǎn)圖像申請一段存空間,大小為圖像存大小。層循環(huán)將每一行

42、的像素點進行翻轉(zhuǎn),左側(cè)的像素移到右側(cè),右側(cè)的像素點移到左側(cè)外層循環(huán)將所有行的像素進行翻轉(zhuǎn)將左側(cè)的像素點移到右側(cè),講右側(cè)的像素點移到左側(cè)。具體過程見圖5.35-3圖像垂直翻轉(zhuǎn)流程圖關(guān)鍵代碼:BOOL CDIB:Rotate()if (m_lpBits = NULL) return FALSE;BYTE *pbits, *p1, *p2, *pa, *pb, *pa1, *pb1;int w2, h2, bw2, bw1, x, y;w2 = m_nHeight;h2 = m_nWidth;bw1 = BYTE_PER_LINE(m_nWidth, m_nBitCount);bw2 = BYTE_

43、PER_LINE(w2, m_nBitCount);pbits = new BYTEbw2*h2;if (m_nBitCount=24)for (y=0; ym_nHeight; y+)for (x=0; xm_nWidth; x+)p1 = m_lpBits+bw1*y+x*3;p2 = pbits+bw2*(h2-x-1)+y*3;p20 = p10;p21 = p11;p22 = p12;elsereturn TRUE;delete m_lpBits;m_lpBits = pbits;m_nWidth = w2;m_nHeight = h2;return TRUE;53圖像瀏覽模塊531

44、圖像放大圖像放大是圖像按照比例擴大,是改變位圖空間的大小。獲得整個位圖的空間尺寸,在不改變位圖的大小,只是將位圖按照原來的大小僅改變相框的大小,而不改變相片的大小。具體流程如5. 45-4圖像放大的流程圖關(guān)鍵代碼:m_dRoom = m_dRoom*1.2;SetModifiedFlag();UpdateAllViews(NULL);532圖像縮小圖像縮小是圖像按照比例縮小,是改變位圖空間的大小。獲得整個位圖的空間尺寸,在不改變位圖的大小,只是將位圖按照原來的大小僅改變相框的大小,而不改變相片的大小。具體流程如5. 55-5圖像縮小的流程圖關(guān)鍵代碼:/ TODO: Add your comma

45、nd handler code herem_dRoom = 1;SetModifiedFlag();UpdateAllViews(NULL);54圖像特效處理541圖像灰度化處理圖像灰度化將彩色圖像灰度化位黑白色的圖像,處理過程為:獲取指向BITMAPINFO結(jié)構(gòu)的指針(Win3.0)定義三個指針lpsrc指向轉(zhuǎn)置圖像對應(yīng)象素的lpdst指針指向轉(zhuǎn)置圖像的指針,lpnew暫時分配存,獲取原圖像的像素點,利用灰度化公式,相應(yīng)的像素點進行處理,刪除原來的位圖,創(chuàng)建新的位圖,變成8色的位圖,創(chuàng)建新的調(diào)色板.具體過程見圖5.65-6圖像灰度化流程圖關(guān)鍵代碼:BOOL CDIB:Grey()if (!m

46、_lpBits) return FALSE;int y, x, nByteWidth, palsize, grey;BYTE *p;nByteWidth = BYTE_PER_LINE(m_nWidth, m_nBitCount);for (y=0; ym_nHeight; y+)for (x=0; xm_nWidth; x+)p = m_lpBits+nByteWidth*y+x*3;grey = (BYTE)(0.299*p2+0.587*p1+0.114*p0);p0 = grey;p1 = grey;p2 = grey;542圖像負像圖像負像就是把圖像轉(zhuǎn)換為底片處理,圖像底片化是將圖像

47、實現(xiàn)底片化效果,將原圖像像素點進行反色處理,處理過程為:ondraw()函數(shù)獲取圖像的高度寬度,每行按四字節(jié)對齊。定義一個文檔列指針。一個無符號型的指針對準原圖像,對圖像進行反色。層循環(huán)對每行的對每個像素點進行反色,外層循環(huán)逐行進行反色。詳細處理過程見圖5.75-7圖像底片化處理關(guān)鍵代碼:BOOL CDIB:Negative()if (!m_lpBits) return FALSE;int y, x, nByteWidth, palsize;BYTE *p;nByteWidth = BYTE_PER_LINE(m_nWidth, m_nBitCount);for (y=0; ym_nHeigh

48、t; y+)for (x=0; xm_nWidth; x+)p = m_lpBits+nByteWidth*y+x*3;p0 = p0;p1 = p1;p2 = p2;6系統(tǒng)運行與總結(jié)61圖像打開系統(tǒng)運行后,點擊文件菜單下的打開選項,按照指示打開目標圖像,打開圖像后如圖6.1所示。62水平翻轉(zhuǎn)運行水平翻轉(zhuǎn)功能:打開目標圖像后,單擊水平翻轉(zhuǎn)子菜單,經(jīng)處理過后的圖像如圖6.263垂直翻轉(zhuǎn)運行垂直翻轉(zhuǎn)功能:打開目標圖像,單擊垂直翻轉(zhuǎn)子菜單,經(jīng)處理過后的圖像如圖6.364圖像放大運行圖像放大功能:打開目標圖像,單擊圖像放大子菜單,經(jīng)處理過后的圖像如圖6.465圖像縮小運行圖像縮小功能:打開目標圖像,單

49、擊圖像縮小子菜單,經(jīng)處理過后的圖像如圖6.566圖像灰度運行圖像灰度功能:打開目標圖像,單擊圖像灰度子菜單,經(jīng)處理過后的圖像如圖6.667圖像負像運行圖像負像功能:打開目標圖像,單擊圖像負像子菜單,經(jīng)處理過后的圖像如圖6.77結(jié)束語通過這次系統(tǒng)開發(fā),我學習了MFC知識,并運用在了我的畢業(yè)設(shè)計中,我所學習到的MFC知識知識MFC庫中的一點,仍有很多不懂的地方,在今后的學習中有機會仍繼續(xù)。圍繞對一個具體的系統(tǒng)的開發(fā),把計算機的理論與實踐相結(jié)合,豐富了自己的編程經(jīng)驗。在這兩個多月里,我學到了許多以前沒有學到的知識和技能,鍛煉了自己的獨立思考能力和實際操作能力,系統(tǒng)整理了大學四年所學的知識。并自學了MFC框架開發(fā)技術(shù),VC+技術(shù),圖像處理等眾多的知識,特別是學會了對軟件開發(fā)中整個流程的分析。從系統(tǒng)需求分析開始,系統(tǒng)的分析和設(shè)計、系統(tǒng)的實施、編寫代碼、調(diào)試和書寫文檔以與最后運行程序,這些練習都為我將來的學習和工作提供了良好的理論基礎(chǔ)和實踐能力。在此過程中我遇到了許多

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論