BMP文件圖像模糊化處理的設(shè)計(jì)報(bào)告_第1頁(yè)
BMP文件圖像模糊化處理的設(shè)計(jì)報(bào)告_第2頁(yè)
BMP文件圖像模糊化處理的設(shè)計(jì)報(bào)告_第3頁(yè)
BMP文件圖像模糊化處理的設(shè)計(jì)報(bào)告_第4頁(yè)
BMP文件圖像模糊化處理的設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《溝通與協(xié)作實(shí)訓(xùn)》實(shí)習(xí)報(bào)告專業(yè)班級(jí):學(xué)號(hào):姓名:第一部分認(rèn)知實(shí)習(xí)總結(jié)經(jīng)過(guò)這五天的認(rèn)知實(shí)習(xí)我收獲很大,首先是我們的東營(yíng)之旅,回到我們的老校區(qū),在那里的食堂吃飯,看薈萃湖盛開的荷花,看“東營(yíng)版”的創(chuàng)造太陽(yáng)雕塑,參觀各個(gè)學(xué)院的辦公樓,教學(xué)樓,實(shí)驗(yàn)樓,包括宿舍,都讓我覺(jué)得有種新鮮感,那是種陌生又熟悉的感覺(jué),作為石油大學(xué)的學(xué)生,看見老校區(qū)著實(shí)有種情切的感覺(jué),尤其是來(lái)到我們計(jì)算機(jī)與通信工程學(xué)院樓前,腦中浮現(xiàn)出的是我的學(xué)長(zhǎng)們?cè)谶@所建筑物中拼搏的景象,聽見老師講述當(dāng)年的一切,我們都很感興趣心中充滿了好奇,暗暗為自己加油,希望有一天我們走出校門的時(shí)候,也能做出與我們學(xué)校名聲相配的成績(jī),只有這樣才不會(huì)辱沒(méi)我們石油大學(xué)這六十年的光輝校史,只有這樣才對(duì)得起師長(zhǎng)的教誨,只有這樣我們才能稱自己是石大人,因?yàn)槲覀冇衅D苦奮斗的傳統(tǒng),有令人羨慕的成績(jī),我為你感到驕傲石油大學(xué)。之后我們來(lái)到了東營(yíng)的中國(guó)聯(lián)通公司,在那里我們參觀了它的計(jì)算中心,我非常興奮,因?yàn)榈谝淮慰匆娔敲炊嗟木W(wǎng)線,和那么大的主機(jī),那么多的機(jī)器,之前我從未想過(guò)我所學(xué)習(xí)的軟件工程專業(yè)竟然需要這么多的設(shè)備來(lái)支持,我知道這些設(shè)備運(yùn)行的背后是靠著大量的代碼來(lái)支撐的,只是多么好的硬件和軟件相結(jié)合啊,讓我不禁感嘆這個(gè)計(jì)算機(jī)的世界真是太美秒了,它帶動(dòng)著整個(gè)世界在飛速發(fā)展,而我有一天也會(huì)投身在這一行業(yè),發(fā)揮自己的力量,燃燒總記得光和熱,為社會(huì)奉獻(xiàn)自己的力量,第一次來(lái)聯(lián)通公司的內(nèi)部,感覺(jué)這里很神秘,在里面我們還了解到了GIS,看見工作人員通過(guò)電腦實(shí)時(shí)查看道路交通狀況,甚至連那個(gè)車在做什么有沒(méi)有在工作都看的一清二楚,我又一次感到自己要學(xué)的東西還有太多太多,自己不知道的世界還很大很大,自己要看清自己的渺小,通過(guò)不斷學(xué)習(xí)來(lái)充實(shí)自己的大腦,希望自己可以在計(jì)算機(jī)領(lǐng)域可以取得令自己滿意的成績(jī),因?yàn)檫@個(gè)領(lǐng)域真的是太神奇了,如果只是表面的認(rèn)識(shí)我會(huì)覺(jué)得很失敗,因此我會(huì)努力學(xué)習(xí),在更深層次認(rèn)識(shí)計(jì)算機(jī),認(rèn)識(shí)軟件工程。之后我們參觀了東營(yíng)軟件園,當(dāng)然只是一些簡(jiǎn)單的參觀,聽工作人員的講解,雖然大部分不太懂,但是這樣反而會(huì)激起我們的學(xué)習(xí)興趣,大家對(duì)這次行程都感到很滿意,覺(jué)得很有意義,大約五點(diǎn)左右我們一行人啟程返回學(xué)校,一路上大家都在思考,今天的所見所聞對(duì)任何人來(lái)說(shuō)都是一次絕妙的旅行,到達(dá)學(xué)校后回到宿舍大家又開始討論,忽然覺(jué)得計(jì)算機(jī)中有很大的樂(lè)趣,值得我們用一生來(lái)探求。第二天我們聽了學(xué)校網(wǎng)絡(luò)中心的老師介紹我校的一卡通系統(tǒng),知道了有關(guān)信息化校園的信息,了解了我們學(xué)校,數(shù)字化校園建設(shè)的進(jìn)程,以及一些我們之前不熟悉有關(guān)一卡通的知識(shí),比如可以在網(wǎng)上繳費(fèi),在網(wǎng)上還可以做許多是,只是我們認(rèn)識(shí)的太少了,我校的一卡通系統(tǒng)還在進(jìn)一步的完善之中,完善后還會(huì)有更多的功能,我知道這些完善都是需要代碼來(lái)完成的,我有更進(jìn)一步的認(rèn)識(shí)到了軟件工程專業(yè)的重要性,以及想要做成智能化,信息化,數(shù)字化軟件工程都在其中起到了舉足輕重的作用,這更使我有信心學(xué)好自己的專業(yè),為學(xué)校為社會(huì)貢獻(xiàn)自己的力量,當(dāng)然知一切的前提是我們必須學(xué)好自己的專業(yè)知識(shí)。此外在認(rèn)知實(shí)習(xí)期間,我們還聽取了學(xué)校就業(yè)指導(dǎo)中心老師的報(bào)告,老師為我們就自己未來(lái)能做什么等方面做了深刻的講解,讓我們對(duì)自己有了更深的了解讓我們知道了堅(jiān)持自己的夢(mèng)想的重要性,老師在不斷地鼓勵(lì)我們,提升我們的信心,讓我們對(duì)自己專業(yè)有了更清楚的認(rèn)識(shí),讓我們知道了自己還有許多不知道的東西,外面的世界也是我們不曾接觸的,讓我們認(rèn)清了只要現(xiàn)在努力就會(huì)有美好的未來(lái)的事實(shí),我知道自己會(huì)面臨就業(yè)的問(wèn)題,但是我相信只要我認(rèn)真的學(xué)習(xí),就業(yè)不會(huì)有問(wèn)題,可能工資不高,但是只要我積累足夠的經(jīng)驗(yàn)就一定可以,但是我認(rèn)為更深一步的是我想對(duì)這個(gè)領(lǐng)域有更深刻的認(rèn)識(shí),因?yàn)檫@樣一個(gè)精彩的世界我不能不參與,如果只是為了生存而學(xué)習(xí)我會(huì)覺(jué)得自己很失敗。在那之后,我們參觀了學(xué)校的計(jì)算中心,和我們計(jì)算機(jī)與通信工程學(xué)院的實(shí)驗(yàn)樓,看見在那里實(shí)習(xí)的學(xué)長(zhǎng)們,并且?guī)ьI(lǐng)他們實(shí)習(xí)的老師也為我們做了關(guān)于他們實(shí)習(xí)內(nèi)容介紹,一些基本設(shè)施的介紹,在學(xué)校的計(jì)算中心我們看見了和在東營(yíng)聯(lián)通公司同樣的設(shè)備,我認(rèn)識(shí)到原來(lái)自己每天都使用的網(wǎng)絡(luò)是通過(guò)這些大家伙來(lái)實(shí)現(xiàn)的,當(dāng)天晚上我們聽取了校網(wǎng)絡(luò)中心老師對(duì)我們的校園網(wǎng)做的介紹,發(fā)現(xiàn)有許多地方我們還是不了解,校園網(wǎng)的功能我們大部分都沒(méi)使用,例如進(jìn)入校園網(wǎng)自己的主頁(yè)只需進(jìn)入WWW.i.upc.edu.cn,在那里面有我們的個(gè)人信息,我們每個(gè)人都有一個(gè)自己的郵箱,等等。之后就是為了程序設(shè)計(jì)實(shí)習(xí)的準(zhǔn)備工作,李曉旭老師為我們講解了MFC類庫(kù),并且要求我們?cè)诮酉聛?lái)的幾天查閱資料為了后面的實(shí)習(xí)做準(zhǔn)備,至此認(rèn)知實(shí)習(xí)全部結(jié)束,等待我們的是程序設(shè)計(jì)實(shí)習(xí)。經(jīng)過(guò)這幾天的認(rèn)知實(shí)習(xí),我收獲很大,認(rèn)識(shí)到自己要學(xué)的東西還有很多,自己在計(jì)算機(jī)的世界簡(jiǎn)直太渺小了,唯有經(jīng)過(guò)不斷的努力才能學(xué)到新的知識(shí),才能更多的探索計(jì)算機(jī)這個(gè)領(lǐng)域,才能認(rèn)清軟件工程專業(yè),才會(huì)有更多的樂(lè)趣,才能讓生活不再乏味,因?yàn)槲壹热贿x擇了計(jì)算機(jī),選擇了軟件工程就一定要把它弄明白要不然學(xué)著也就沒(méi)有意義了,為了以后現(xiàn)在所做的一切都是必須的,都是基礎(chǔ)是為了更進(jìn)一步所做的鋪墊,我們每個(gè)人都必須這么做,因?yàn)檫@在今后可能就是我們生活中最重要的組成部分?!冻绦蛟O(shè)計(jì)實(shí)習(xí)》實(shí)習(xí)報(bào)告圖像簡(jiǎn)易處理_圖像模糊化一、題目介紹要求設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)易的圖像處理軟件,能夠從文件讀取并顯示BMP圖像數(shù)據(jù);對(duì)圖像進(jìn)行一些常規(guī)的處理,包括圖像的放大/縮小、圖像滾動(dòng)、彩色轉(zhuǎn)灰度、圖像模糊化;能夠?qū)⑻幚砗蟮膱D像數(shù)據(jù)保存至文件。1.讀取并顯示BMP圖像:通過(guò)VC提供的文件打開對(duì)話框讓用戶選擇要打開的BMP文件,讀取文件數(shù)據(jù),將BMP圖像顯示到主窗口的客戶區(qū)。首次顯示時(shí)保持BMP圖像的原始尺寸。若圖像在寬度或高度上超過(guò)窗口客戶區(qū),則需要提供滾動(dòng)條對(duì)圖像進(jìn)行滾動(dòng)操作。網(wǎng)絡(luò)上存在很多讀取并顯示BMP圖像的源碼,可下載并改造至程序中,也可以使用現(xiàn)成的圖像處理類庫(kù)或組件(如著名的CxImage類庫(kù))。2.圖像模糊化:圖像中各個(gè)部分(如人的眼睛)通常比較清晰,與周圍其他部分截然不同,此功能是將圖像模糊化,使得整個(gè)圖像變得“發(fā)虛”,增加了不同部分過(guò)渡的平滑性,但降低了圖像原本的清晰度。圖像模糊化通常采用基于區(qū)域的像素重整策略,也就是說(shuō),一個(gè)像素的顏色值要根據(jù)它周圍其他像素的顏色值通過(guò)一定的算法(如平均或加權(quán)平均)獲得,每個(gè)像素經(jīng)過(guò)同樣處理之后,其顏色值均由周圍像素混合而成,從而增加了圖像各個(gè)部分過(guò)渡的平滑性,實(shí)現(xiàn)模糊化。3.保存圖像至文件:通過(guò)VC提供的保存文件對(duì)話框讓用戶選擇要保存的目錄位置及文件名,將窗口中處理過(guò)的圖像保存至BMP文件。軟件界面不做具體的規(guī)定,可自行設(shè)計(jì)。但要本著簡(jiǎn)潔使用、操作方便、視覺(jué)美觀的原則。二、主要內(nèi)容(詳細(xì)介紹系統(tǒng)總體功能、模塊劃分,以及每個(gè)模塊的具體實(shí)現(xiàn))系統(tǒng)的總體功能是實(shí)現(xiàn)圖像的模糊化,主要分為三個(gè)模塊:1.讀取并顯示BMP圖像,2.圖像模糊化,3.保存圖像至文件。首先是讀取并顯示BMP圖片:第一步:建立MFC工程文件--新建--MFCAppWizardd(exe)工程--單文檔—確定。第二步:設(shè)置打開函數(shù)查看--建立類導(dǎo)向(Ctrl+W)--CpictureXSView(類名)--ID_FILE_OPEN(IDs列表)--COMMAND(Messages列表)--默認(rèn)成員函數(shù)名為OnFileOpen--MemberFunctions(成員函數(shù))中雙擊該函數(shù)進(jìn)入函數(shù)編輯。建立如下函數(shù):打開圖片、保存圖片為重點(diǎn)。對(duì)象標(biāo)識(shí)符消息函數(shù)名所屬類ID_FILE_OPENCOMMANDOnFileOpenCpainterViewID_FILE_SAVECOMMANDOnFileSaveCpainterViewID_FILE_NEWUPDATE_COMMAND_UIOnUpdateFileNewCpainterViewID_FILE_MRU_FILE1UPDATE_COMMAND_UIOnUpdateFileMruFile1CpainterView注意:在添加Messages列表中:ON_COMMAND是點(diǎn)了按鈕或菜單項(xiàng)后的響應(yīng)消息;ON_UPDATE_COMMAND_UI是用來(lái)表示對(duì)應(yīng)的按鈕和菜單項(xiàng)的狀態(tài)的響應(yīng)消息,比如你打開這個(gè)菜單時(shí),處理這個(gè)菜單的狀態(tài),比如選中、變灰等。UPDATE_COMMAND_UI處理程序的參數(shù)是個(gè)「指向CCmdUI對(duì)象的指針」,而CCmdUI對(duì)象就代表著對(duì)應(yīng)的選單命令項(xiàng),因此你只需呼叫CCmdUI所準(zhǔn)備的,專門用來(lái)處理命令項(xiàng)外觀的函式(如Enable或SetCheck)即可。第三步:View類添加成員函數(shù)和成員變量//參數(shù)定義

public:

CStringBmpName;

//保存圖像文件文件名

CStringEntName;

//保存圖像文件擴(kuò)展名

CBitmapm_bitmap;

//創(chuàng)建位圖對(duì)象

void

ShowBitmap(CDC*pDC,CStringBmpName);

//用來(lái)顯示指定位圖bmp的函數(shù)

BOOLShowJpgGif(CDC*

pDC,CStringstrPath,

int

x,

int

y);//用來(lái)顯示指定位圖jpg、gif的函數(shù)添加方法:選中ClassView區(qū)--選中View類右鍵--增加成員變量函數(shù)。第四步:為ID_FILE_OPEN消息添加打開函數(shù)//**************文件打開****************//voidCPictureMapView::OnFileOpen(){//四種格式的文件:bmpgifjpgtiff CStringfilter; filter="所有文件(*.bmp,*.jpg,*.gif,*tiff)|*.bmp;*.jpg;*.gif;*.tiff|BMP(*.bmp)|*.bmp|JPG(*.jpg)|*.jpg|GIF(*.gif)|*.gif|TIFF(*.tiff)|*.tiff||"; CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter,NULL); //按下確定按鈕dlg.DoModal()函數(shù)顯示對(duì)話框 if(dlg.DoModal()==IDOK) { //獲取路徑文件名擴(kuò)展文件名 BmpName=dlg.GetPathName(); //BmpName.Format(_T("%s",str));//重點(diǎn):錯(cuò)誤會(huì)出現(xiàn)錯(cuò)誤的路徑 //AfxMessageBox(BmpName);//顯示圖片的路徑:打樁功能 EntName=dlg.GetFileExt(); EntName.MakeLower();//此成員函數(shù)將此CString對(duì)象轉(zhuǎn)換為一個(gè)小寫字符串 /**********************************************/ /**使用CString處理字符串可處理Unicode、ANSI**/ /**CString中的Format進(jìn)行字符串轉(zhuǎn)換**/ /**********************************************/ Invalidate();//調(diào)用該函數(shù)就會(huì)調(diào)用ONDRAW畫圖 }}第五步:新建菜單和最近使用菜單不可用MFCClassWizard(ctrl+W)--CpictureXSView(類名)--ID_FILE_NEW(IDs列表)—UPDATE_COMMAND_UI(Messages列表)—選擇默認(rèn)成員函數(shù)名--MemberFunctions(成員函數(shù))中雙擊該函數(shù)進(jìn)入函數(shù)編輯。添加函數(shù)://************使新建菜單不可用*********//voidCPictViewView::OnUpdateFileNew(CCmdUI*pCmdUI){ //TODO:AddyourcommandupdateUIhandlercodehere pCmdUI->Enable(FALSE);}同理:最近使用菜單//************使“最近的文件”不可用*********//voidCPictViewView::OnUpdateFileMruFile1(CCmdUI*pCmdUI){ //TODO:AddyourcommandupdateUIhandlercodehere pCmdUI->Enable(FALSE);}第六步:編寫顯示bmp格式圖片函數(shù)//***************顯示bmp格式圖片******************//voidCPictureMapView::ShowBitmap(CDC*pDC,CStringBmpName){ //顯示圖片函數(shù)LoadImage HBITMAPm_hBitmap; m_hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION); //AfxMessageBox(BmpName); /**************************************************/ /**1.要裝載OEM圖像,則設(shè)此參數(shù)值為0**/ /**OBM_OEM:位圖;OIC_OEM圖標(biāo);OCR_OEM:光標(biāo)**/ /**2.BmpName要裝載圖片的文件名**/ /**3.裝載圖像類型:IMAGE_BITMAP-裝載位圖**/ /**IMAGE_CURSOR-裝載光標(biāo)**/ /**IMAGE_ICON-裝載圖標(biāo)**/ /**4.指定圖標(biāo)或光標(biāo)的寬度和長(zhǎng)度以像素為單位**/ /**此參數(shù)為零并且值LR_DEFAULTSIZE沒(méi)有被使用那么**/ /**函數(shù)使用目前的資源寬度**/ /**************************************************/ if(m_bitmap.m_hObject) { m_bitmap.Detach();//m_bitmap為創(chuàng)建的位圖對(duì)象 } m_bitmap.Attach(m_hBitmap); //邊界 CRectrect; GetClientRect(&rect); //定義并創(chuàng)建一個(gè)內(nèi)存設(shè)備環(huán)境 CDCdcBmp; if(!dcBmp.CreateCompatibleDC(pDC))//創(chuàng)建兼容性的DC return; BITMAPm_bmp;//臨時(shí)bmp圖片變量 //MessageBox("圖片正在導(dǎo)入!"); m_bitmap.GetBitmap(&m_bmp);//將圖片載入位圖中//MFCafxwin1.inl錯(cuò)誤GetBitmap中 CBitmap*pbmpOld=NULL; dcBmp.SelectObject(&m_bitmap);//將位圖選入臨時(shí)內(nèi)存設(shè)備環(huán)境//圖片顯示調(diào)用函數(shù)BitBlt pDC->BitBlt(0,0,m_bmp.bmWidth,m_bmp.bmHeight,&dcBmp,0,0,SRCCOPY);/******************************************************/ /**參數(shù)x、y位圖目標(biāo)矩形左上角x、y的坐標(biāo)值居中**/ /**nWidth、nHeigth位圖目標(biāo)矩形的邏輯寬度和高度**/ /**pSrcDC表示源設(shè)備CDC指針**/ /**xSrc、ySrc表示位圖源矩形的左上角的x、y邏輯坐標(biāo)值**/ /**dwRop表示顯示位圖的光柵操作方式**/ /**SRCCOPY用于直接將位圖復(fù)制到目標(biāo)環(huán)境中**/ /******************************************************/ dcBmp.SelectObject(pbmpOld);//恢復(fù)臨時(shí)DC的位圖 DeleteObject(&m_bitmap);//刪除位圖 dcBmp.DeleteDC();//刪除后臺(tái)DC//Invalidate();//一直調(diào)用OnDraw顯示圖片}第六步:實(shí)現(xiàn)圖片顯示voidCPictureMapView::OnDraw(CDC*pDC){ CPictureMapDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere /*在OnDraw函數(shù)中實(shí)現(xiàn)圖片的最后顯示功能*/ if(!pDoc) return;if(EntName.Compare(_T("bmp"))==0)//bmp格式 { ShowBitmap(pDC,BmpName); } elseif(EntName.Compare(_T("jpg"))==0) { ShowJpgGif(pDC,BmpName,1,1); }之后是對(duì)圖像進(jìn)行模糊化處理:其中主要是利用了高斯平滑作為數(shù)學(xué)模板對(duì)圖像進(jìn)行模糊化處理,以及改變像素的算法,下面是對(duì)高斯平滑的簡(jiǎn)單說(shuō)明:圖像的高斯平滑也是利用鄰域平均的思想,對(duì)圖像進(jìn)行平滑處理的一種方法。與圖像的簡(jiǎn)單平滑不同的是,圖像的高斯平滑中,在對(duì)圖像鄰域進(jìn)行平均時(shí),不同位置的像素被賦予了不同的權(quán)值。在圖像的簡(jiǎn)單平滑處理中,算法利用卷積模板逐一處理圖像中的每個(gè)像素,最終得到處理結(jié)果,這一過(guò)程可以形象地比作對(duì)源圖像中的像素一一進(jìn)行過(guò)濾整理,同時(shí)進(jìn)行必要的運(yùn)算,最后產(chǎn)生結(jié)果數(shù)據(jù)。圖像處理中把對(duì)像素鄰域逐一處理的算法過(guò)程稱為濾波器。平滑線性濾波器的工作原理是利用模板對(duì)鄰域內(nèi)像素灰度進(jìn)行加權(quán)平均,因此平滑線性濾波器也被稱為均值濾波器,圖像的簡(jiǎn)單平滑就是平滑線性濾波器的一種應(yīng)用。平滑線性濾波器的衰減因子一般選用模板中所有權(quán)值的和,這樣就可避免處理對(duì)圖像整體屬性的影響。另外,線性濾波器不僅能用于圖像的平滑,也可以用于圖像的其他增強(qiáng)處理,這些會(huì)在后面的章節(jié)為大家介紹。高斯平滑的原理:圖像的高斯平滑是平滑線性濾波器的另一種應(yīng)用,與圖像的簡(jiǎn)單平滑不同的是,它在對(duì)鄰域內(nèi)像素灰度進(jìn)行平均時(shí),給予了不同位置像素不同的權(quán)值。圖11-8顯示的是3×3鄰域的高斯模板,模板上越是靠近鄰域中心的位置,其權(quán)值就越高。如此安排權(quán)值的意義在于用此模板進(jìn)行圖像平滑時(shí),在對(duì)圖像細(xì)節(jié)進(jìn)行模糊的同時(shí),可以更多地保留圖像總體的灰度分布特征。相比圖像的簡(jiǎn)單平滑,高斯平滑對(duì)高對(duì)比度圖像的平滑效率較低,在離散型雜點(diǎn)的消除方面,高斯平滑的效果并不理想。然而如果需要在平滑過(guò)程中保留源圖像的總體特征,高斯平滑就具有很大的優(yōu)勢(shì)。圖11-9對(duì)比了圖像的簡(jiǎn)單平滑和高斯平滑的處理差異,圖中a表示一個(gè)5×5鄰域內(nèi)的像素灰度,從圖中可以看出此鄰域內(nèi)有兩處灰度較高的亮點(diǎn),b為對(duì)a進(jìn)行3×3鄰域簡(jiǎn)單平滑的結(jié)果,從b中可以看出,源圖像中的兩處亮點(diǎn)被連接在一起,失去了源圖像的特征,c為對(duì)a進(jìn)行3×3鄰域高斯平滑的結(jié)果,可以發(fā)現(xiàn)c中依然保留著源圖像的特征。高斯平滑不僅能進(jìn)行3×3鄰域的圖像平滑處理,也可以對(duì)更大范圍的鄰域進(jìn)行平滑,高斯模板上的權(quán)值是由高斯分布函數(shù)確定的,有興趣的讀者可以參考概率論中統(tǒng)計(jì)分布部分的內(nèi)容。高斯平滑的算法實(shí)現(xiàn):考慮圖像為灰度圖,則圖像的簡(jiǎn)單平滑算法如下:BYTE**

CreatImage(BYTE*

image,unsigned

int

width,

unsigned

int

height,

int

bt=4);BYTE

GetAsh(BYTE**

imageBuf0,

int

x,int

y);void

SetPixelXY(BYTE**

imageBuf1,

intx,

int

y,

int

a);int

TempltExcuteAsh(BYTE**

imageBuf0,int

w,

int

h,int*

templt,

int

tw,

int

x,

inty);static

void

SmoothGaussAsh(BYTE*image0,BYTE*

image1,unsignint

w,unsigned

inth){//將圖像轉(zhuǎn)化為矩陣形式BYTE**imageBuf0

=

CreatImage(image0,

w,

h);BYTE**imageBuf1

=

CreatImage(image1,

w,

h);//設(shè)定模板Inttemplt[9]={1,2,1,2,4,2,1,2,1};int

x,y;int

a;intscale;//設(shè)定衰減因子scale

=16;//依次對(duì)源圖像的每個(gè)像素進(jìn)行處理for(y=1;y<h-1;

y++){

for(x=1;

x<w-1;

x++){//利用高斯模板對(duì)鄰域進(jìn)行處理

a=TempltExcuteAsh(imageBuf0,w,h,templt,3,x,y);a/=

scale;//過(guò)限處里a

=a>255?255:a;

a

=

a<0?0:a;SetPixelXY(imageBuf1,x,y,a);

}}//清理內(nèi)存free(imageBuf0);free(imageBuf1);}可以將圖像的高斯平滑推廣到彩色圖像的處理,實(shí)現(xiàn)如下:BYTE**

CreatImage(BYTE*

image,unsigned

int

width,

unsigned

int

height,

int

bt=4)int

TempltExcuteCl(BYTE**

imageBuf0,int

w,

int

h,int*

templt,

int

tw,

int

x,

int

y,

intcn);static

void

SmoothGaussCl(BYTE*image0,

BYTE*

image1,

unsigned

int

w,unsigned

inth){//將圖像轉(zhuǎn)化為矩陣形式BYTE**imageBuf0

=

CreatImage(image0,

w,

h);BYTE**imageBuf1

=

CreatImage(image1,

w,

h);//設(shè)定模板inttemplt[9]={1,2,1,2,4,2,1,2,1};intx,y,c;int

a;intscale;

//設(shè)定衰減因子

scale

=16;

//依次對(duì)源圖像的每個(gè)像素進(jìn)行處理

for(y=1;y<h-1;

y++)

for(x=1;

x<w-1;

x++)

for(c=0;

c<3;

c++)

{//利用高斯模板對(duì)鄰域進(jìn)行處理a=TempltExcuteCl(imageBuf0,w,h,templt3,,x,y,c);a/=

scale;//過(guò)限處理a

=a>255?255:a;

a

=

a<0?0:a;

imageBuf1[y][x*4+c]=a;}

//清理內(nèi)存

free(imageBuf0);

free(imageBuf1);}最后一個(gè)模塊是:圖像的保存主要用到了如下代碼:

bool

SaveBitmapToFile(CBitmap*

bitmap,

LPSTR

lpFileName)

{

HBITMAP

hBitmap;

//

為剛才的屏幕位圖句柄

HDC

hDC;

//設(shè)備描述表

int

iBits;

//當(dāng)前顯示分辨率下每個(gè)像素所占字節(jié)數(shù)

WORD

wBitCount;

//位圖中每個(gè)像素所占字節(jié)數(shù)

DWORD

dwPaletteSize

=

0,

//定義調(diào)色板大小

dwBmBitsSize,

//位圖中像素字節(jié)大小

dwDIBSize,

//位圖文件大小

dwWritten;

//寫入文件字節(jié)數(shù)

BITMAP

Bitmap;

//位圖屬性結(jié)構(gòu)

BITMAPFILEHEADER

bmfHdr;

//位圖文件頭結(jié)構(gòu)

BITMAPINFOHEADER

bi;

//位圖信息頭結(jié)構(gòu)

LPBITMAPINFOHEADER

lpbi;

//指向位圖信息頭結(jié)構(gòu)

HANDLE

fh,

//定義文件

hDib,

//分配內(nèi)存句柄

hPal,

//調(diào)色板句柄

hOldPal

=

NULL;

//計(jì)算位圖文件每個(gè)像素所占字節(jié)數(shù)

hBitmap

=

(HBITMAP)*bitmap;

hDC

=

CreateDC("DISPLAY",NULL,NULL,NULL);iBits=GetDeviceCaps(hDC,BITSPIXEL)*GetDeviceCaps(hDC,

PLANES);

DeleteDC(hDC);

if

(iBits

<=

1)

wBitCount

=

1;

else

if

(iBits

<=

4)

wBitCount

=

4;

else

if

(iBits

<=

8)

wBitCount

=

8;

else

if

(iBits

<=

24)

wBitCount

=

24;

else

if

(iBits

<=

32)

wBitCount

=

32;

//計(jì)算調(diào)色板大小

if

(wBitCount

<=

8)

dwPaletteSize

=

(1

<<

wBitCount)

*

sizeof

(RGBQUAD);

//設(shè)置位圖信息頭結(jié)構(gòu)

GetObject(hBitmap,

sizeof

(BITMAP),

(LPSTR)&Bitmap);

bi.biSize

=

sizeof

(BITMAPINFOHEADER);

bi.biWidth

=

Bitmap.bmWidth;bi.biHeight

=

Bitmap.bmHeight;

bi.biPlanes

=

1;

bi.biBitCount

=

wBitCount;bi.biCompression

=

BI_RGB;bi.biSizeImage

=

0;bi.biXPelsPerMeter

=

0;

bi.biYPelsPerMeter

=

0;

bi.biClrUsed

=

0;

bi.biClrImportant

=

0;

dwBmBitsSize

=

((Bitmap.bmWidth

*

wBitCount+31)

/

32)

*

4

*

Bitmap.bmHeight;

//為位圖內(nèi)容分配內(nèi)存

hDib

=

GlobalAlloc(GHND,

dwBmBitsSize

+

dwPaletteSize

+

sizeof

(BITMAPINFOHEADER));

lpbi

=

(LPBITMAPINFOHEADER)GlobalLock(hDib);

*lpbi

=

bi;

//

處理調(diào)色板

hPal

=

GetStockObject(DEFAULT_PALETTE);

if

(hPal)

{

hDC

=

::GetDC(NULL);

hOldPal

=

::SelectPalette(hDC,

(HPALETTE)hPal,

FALSE);

RealizePalette(hDC);

}

//

獲取該調(diào)色板下新的像素值

GetDIBits(hDC,

hBitmap,

0,

(UINT)

Bitmap.bmHeight,

(LPSTR)lpbi

+

sizeof

(BITMAPINFOHEADER)

+

dwPaletteSize,(LPBITMAPINFO)lpbi,

DIB_RGB_COLORS);

//恢復(fù)調(diào)色板

if

(hOldPal)

{

SelectPalette(hDC,

(HPALETTE)hOldPal,

TRUE);

RealizePalette(hDC);

::ReleaseDC(NULL,

hDC);

}

//創(chuàng)建位圖文件

fh

=

CreateFile(lpFileName,GENERIC_WRITE,0,

NULL,

CREATE_ALWAYS,

FILE_ATTRIBUTE_NORMAL

|

FILE_FLAG_SEQUENTIAL_SCAN,

NULL);

if

(fh

==

INVALID_HANDLE_VALUE)

return

FALSE;

//

設(shè)置位圖文件頭

bmfHdr.bfType

=

0x4D42;

//

"BMP"

dwDIBSize

=

sizeof

(BITMAPFILEHEADER)+

sizeof

(BITMAPINFOHEADER)

+

dwPaletteSize

+

dwBmBitsSize;

bmfHdr.bfSize

=

dwDIBSize;

bmfHdr.bfReserved1

=

0;

bmfHdr.bfReserved2

=

0;

bmfHdr.bfOffBits

=

(DWORD)sizeof

(BITMAPFILEHEADER)+

(DWORD)sizeof

(BITMAPINFOHEADER)+

dwPaletteSize;WriteFile(fh,

(LPSTR)&bmfHdr,

sizeof(BITMAPFILEHEADER),

&dwWritten,

NULL);W

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論