直方圖均衡化 圖像處理程序設(shè)計(jì)vc_第1頁
直方圖均衡化 圖像處理程序設(shè)計(jì)vc_第2頁
直方圖均衡化 圖像處理程序設(shè)計(jì)vc_第3頁
直方圖均衡化 圖像處理程序設(shè)計(jì)vc_第4頁
直方圖均衡化 圖像處理程序設(shè)計(jì)vc_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄1 圖像直方圖均衡化設(shè)計(jì)11.1 設(shè)計(jì)要求11.2 基本原理11.3 設(shè)計(jì)方案及實(shí)現(xiàn)功能32 實(shí)現(xiàn)步驟33 部分主要程序代碼44 運(yùn)行結(jié)果及分析205 心得體會22參考文獻(xiàn)231 圖像直方圖均衡化設(shè)計(jì)1.1 設(shè)計(jì)要求要求用VC+實(shí)現(xiàn)如下功能:(1)建立一個(gè)單文檔的應(yīng)用項(xiàng)目。(2)在主框架添加菜單“圖像處理”,并在此菜單下添加如下子菜單“顯示原圖像”、“顯示原圖像的直方圖”、“圖像直方圖均衡化”、“顯示均衡化處理后的直方圖”。(3)實(shí)現(xiàn)“顯示原圖像”功能,并以對話框的形式顯示。(4)實(shí)現(xiàn)“顯示原圖像直方圖”功能,并以對話框的形式顯示。(5)實(shí)現(xiàn)“圖像直方圖均衡化”功能、實(shí)現(xiàn)“顯示均衡化處理后

2、的直方圖”功能,并以對話框的形式顯示。1.2 基本原理 圖像的直方圖包含了豐富的圖像信息,描述了圖像的灰度級內(nèi)容,反映了圖像的灰度分布情況。圖像直方圖是圖像處理中一種十分重要的圖像分析工具,具有簡單實(shí)用的特點(diǎn),通過對圖像的灰度值進(jìn)行統(tǒng)計(jì),可以得到一個(gè)一維離散的圖像灰度統(tǒng)計(jì)、直方圖函數(shù)。 直方圖均衡化:圖像對比度增強(qiáng)的方法可以分成兩類:一類是直接對比度增強(qiáng)方法;另一類是間接對比度增強(qiáng)方法。直方圖拉伸和直方圖均衡化是兩種最常見的間接對比度增強(qiáng)方法。直方圖拉伸是通過對比度拉伸對直方圖進(jìn)行調(diào)整,從而“擴(kuò)大”前景和背景灰度的差別,以達(dá)到增強(qiáng)對比度的目的,這種方法可以利用線性或非線性的方法來實(shí)現(xiàn);直方圖均

3、衡化則通過使用累積函數(shù)對灰度值進(jìn)行“調(diào)整”以實(shí)現(xiàn)對比度的增強(qiáng)。 直方圖均衡化處理的“中心思想”是把原始圖像的灰度直方圖從比較集中的某個(gè)灰度區(qū)間變成在全部灰度范圍內(nèi)的均勻分布。直方圖均衡化就是對圖像進(jìn)行非線性拉伸,重新分配圖像像素值,使一定灰度范圍內(nèi)的像素?cái)?shù)量大致相同。直方圖均衡化就是把給定圖像的直方圖分布改變成“均勻”分布直方圖分布。 缺點(diǎn): 1)變換后圖像的灰度級減少,某些細(xì)節(jié)消失; 2)某些圖像,如直方圖有高峰,經(jīng)處理后對比度不自然的過分增強(qiáng)。 直方圖均衡化是圖像處理領(lǐng)域中利用圖像直方圖對對比度進(jìn)行調(diào)整的方法。 這種方法通常用來增加許多圖像的局部對比度,尤其是當(dāng)圖像的有用數(shù)據(jù)的對比度相當(dāng)接

4、近的時(shí)候。通過這種方法,亮度可以更好地在直方圖上分布。這樣就可以用于增強(qiáng)局部的對比度而不影響整體的對比度,直方圖均衡化通過有效地?cái)U(kuò)展常用的亮度來實(shí)現(xiàn)這種功能。 這種方法對于背景和前景都太亮或者太暗的圖像非常有用,這種方法尤其是可以帶來X光圖像中更好的骨骼結(jié)構(gòu)顯示以及曝光過度或者曝光不足照片中更好的細(xì)節(jié)。這種方法的一個(gè)主要優(yōu)勢是它是一個(gè)相當(dāng)直觀的技術(shù)并且是可逆操作,如果已知均衡化函數(shù),那么就可以恢復(fù)原始的直方圖,并且計(jì)算量也不大。這種方法的一個(gè)缺點(diǎn)是它對處理的數(shù)據(jù)不加選擇,它可能會增加背景雜訊的對比度并且降低有用信號的對比度。 直方圖均衡化的基本思想是把原始圖的直方圖變換為均勻分布的形式,這樣就

5、增加了象素灰度值的動態(tài)范圍從而可達(dá)到增強(qiáng)圖像整體對比度的效果。設(shè)原始圖像在(x,y)處的灰度為f,而改變后的圖像為g,則對圖像增強(qiáng)的方法可表述為將在(x,y)處的灰度f映射為g。在灰度直方圖均衡化處理中對圖像的映射函數(shù)可定義為:g = EQ (f),這個(gè)映射函數(shù)EQ(f)必須滿足兩個(gè)條件(其中L為圖像的灰度級數(shù)): (1)EQ(f)在0fL-1范圍內(nèi)是一個(gè)單值單增函數(shù)。這是為了保證增強(qiáng)處理沒有打亂原始圖像的灰度排列次序,原圖各灰度級在變換后仍保持從黑到白(或從白到黑)的排列。 (2)對于0fL-1有0gL-1,這個(gè)條件保證了變換前后灰度值動態(tài)范圍的一致性。 累積分布函數(shù)(cumulative

6、distribution function,CDF)即可以滿足上述兩個(gè)條件,并且通過該函數(shù)可以完成將原圖像f的分布轉(zhuǎn)換成g的均勻分布。此時(shí)的直方圖均衡化映射函數(shù)為: gk = EQ(fk) = (ni/n) = pf(fi) , (k=0,1,2,L-1) 上述求和區(qū)間為0到k,根據(jù)該方程可以由源圖像的各像素灰度值直接得到直方圖均衡化后各像素的灰度值。在實(shí)際處理變換時(shí),一般先對原始圖像的灰度情況進(jìn)行統(tǒng)計(jì)分析,并計(jì)算出原始直方圖分布,然后根據(jù)計(jì)算出的累計(jì)直方圖分布求出fk到gk的灰度映射關(guān)系。在重復(fù)上述步驟得到源圖像所有灰度級到目標(biāo)圖像灰度級的映射關(guān)系后,按照這個(gè)映射關(guān)系對源圖像各點(diǎn)像素進(jìn)行灰度

7、轉(zhuǎn)換,即可完成對源圖的直方圖均衡化。 1.3 設(shè)計(jì)方案及實(shí)現(xiàn)功能 利用Visual C+中提供的MFC框架設(shè)計(jì)一個(gè)簡單的應(yīng)用程序框架,具有圖像顯示,圖像直方圖均衡,直方圖均衡后圖像等菜單欄,再利用C+具有面向?qū)ο蟪绦蛟O(shè)計(jì)的性質(zhì),編寫程序代碼實(shí)現(xiàn)MFC框架中對應(yīng)菜單欄中的圖像處理的功能,即可得到一個(gè)簡易的圖像處理系統(tǒng),達(dá)到課程考核題目的要求。本次課程考核設(shè)計(jì)了一個(gè)簡單的圖片處理系統(tǒng),主要具有以對話框的形式顯示原始圖片(bmp格式)、顯示原圖像的直方圖、圖像直方圖均衡化、顯示均衡化處理后的直方圖的功能。2 實(shí)現(xiàn)步驟步驟1:創(chuàng)建單文檔應(yīng)用項(xiàng)目 啟動VC,新建工程MFC APP Wizardexe.定

8、義工程名稱VC,確定在選擇單文檔模式完成,實(shí)現(xiàn)出單文檔項(xiàng)目的建立。步驟2:主框架菜單的添加在VC的工作空間下方點(diǎn)Resources找到VC資源目錄,從中看到Menu菜單項(xiàng),點(diǎn)擊打開。然后看到主框架,雙擊一項(xiàng)或查看屬性在標(biāo)明里面可以修改顯示字符。按此次設(shè)計(jì)要求,在主框架一項(xiàng)上修改為圖像處理,在其彈出打上勾,在彈出框里一次編輯“顯示原圖像”、“顯示直方圖”、“顯示均衡化后直方圖”、“顯示直方圖均衡化后的圖像”。ID定義留到依次設(shè)計(jì)此command功能的定義,以防弄混。實(shí)現(xiàn)主框架菜單的添加。步驟3:BMP圖像的打開在主框架菜單第一項(xiàng)中,系統(tǒng)有一默認(rèn)的文件,其下拉框有打開,對其進(jìn)行類向?qū)?,選擇在CVc

9、view下,可觀察到工作空間的class view中的CVcview下會出現(xiàn)ONFileOpend的類,由于應(yīng)用OnPaint,此時(shí)在CVcview出點(diǎn)右鍵,Add windows Messsages Hander然后選擇WM_PAINT,添加On paint,此時(shí)可對ONFileOpen和Onpaint寫入代碼實(shí)現(xiàn)BMP圖像文件的打開。在完成寫入代碼的操作以后需將tools這一工具函數(shù)文件的、引入到工程中,先將tools,cpp與tool.h粘貼進(jìn)入工程目錄下,然后在工作空間中選擇FileView一欄分別在SourcesFile和HeaderFile下添加cpp和h文件。完成tools的添加

10、。此時(shí)需注意在程序開頭打入include“tools.h”.從而實(shí)現(xiàn)圖像BMP文件的打開。步驟4:顯示原圖像的功能實(shí)現(xiàn)在Menu中找到顯示原圖像這一command,首先定義ID為ID_XIAN_SHI,對其建立類向?qū)鏔ileOpen。然后再其中寫入代碼。先可用MessageBox(“ok”)進(jìn)行操作檢驗(yàn)。成功后,建立dlg,在Resources中Dialog里插入對話框。將屬性中標(biāo)題改為顯示原圖,并建立類向?qū)?,生成新的class,定義名為XianShi,在其中添加OnPaint,OnInitDillog.此時(shí)對CVcview下的OnXianShi和XianShi下的onPaint 和onIn

11、itdDalog分別寫入代碼,實(shí)現(xiàn)原圖像的顯示功能。步驟5:原圖直方圖的顯示操作步驟如同步驟四,詳細(xì)見后續(xù)代碼。步驟6:均衡化后的直方圖顯示操作步驟如同步驟四,詳細(xì)見后續(xù)代碼。步驟7:顯示均衡化之后的圖像操作步驟如同步驟四,詳細(xì)見后續(xù)代碼。3 部分主要程序代碼 (1) BMP圖像文件的打開程序代碼void CVCView:OnFileOpen() / TODO: Add your command handler code herechar filt220;strcpy(filt,"BMP Files(*.bmp)|*.bmp;|");CFileDialog fd(true,

12、"bmp", NULL, OFN_FILEMUSTEXIST,filt,this);if(fd.DoModal()!=IDOK)return;CString fname=fd.GetPathName();fname1 = fname;fname.MakeUpper();int i,dx,dy;i=GetBmpSize(fname,&dx,&dy);if(i=0) return;UINT *buf=new UINTdx*dy;ReadBmp(fname,dx,dy,buf);/顯示圖mdr->overlay_rect(0,0,1000,1000,0xff

13、ffffff);/每次打開之前都要用白色刷一遍mdr->write_video(0,0,dx,dy,buf);mdr->swap();delete buf;/ TODO: Add your command handler code herevoid CVCView:OnPaint() CPaintDC dc(this); / device context for painting/ TODO: Add your message handler code hereif(mdc=NULL) mdc=new CClientDC(this);if(mdr=NULL) mdr=new mdr

14、aw(0,0,1000,600,mdc);else mdr->swap();/ Do not call CView:OnPaint() for painting messages(2) 顯示原圖像程序代碼void CVCView:OnXianShi() / TODO: Add your command handler code here/Dlg.DoModal();XianShi Dlg;CString str;int i,dx,dy;i=GetBmpSize(fname1,&dx,&dy);if(i=0) return;UINT *buf=new UINTdx*dy;R

15、eadBmp(fname1,dx,dy,buf);Dlg.filename = fname1;Dlg.buf = buf;Dlg.DoModal();delete buf;void XianShi:OnPaint() CPaintDC dc(this);CClientDC* pDC=new CClientDC(this);CBitmap m_bitmap;HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T(filename),IMAGE_BITMAP, 0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE

16、); m_bitmap.Attach (hBitmap);CDC dcImage;if(!dcImage.CreateCompatibleDC (pDC)return;BITMAP bm;m_bitmap.GetBitmap (&bm); dcImage.SelectObject (&m_bitmap);pDC->BitBlt (0,0,bm.bmWidth ,bm.bmHeight ,&dcImage,0,0,SRCCOPY);this->SetWindowPos(NULL,NULL,NULL,bm.bmWidth+7,bm.bmHeight+30, SW

17、P_NOMOVE);(3) 顯示直方圖程序代碼void CVCView:OnShowHist() / TODO: Add your command handler code here/MessageBox("ok");ShowHist Dlg;CString str;int i,dx,dy;i=GetBmpSize(fname1,&dx,&dy);if(i=0) return;UINT *buf=new UINTdx*dy;ReadBmp(fname1,dx,dy,buf);Dlg.filename = fname1;Dlg.buf = buf;Dlg.Do

18、Modal();delete buf;public:ShowHist(CWnd* pParent = NULL); / standard constructorint m_nHist256;UINT *buf;CString filename;BOOL ShowHist:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization hereCString str;int i,j,dx,dy;unsigned char * lpSrc;CString fname = this->filename;/Messag

19、eBox(fname);i=GetBmpSize(fname,&dx,&dy);/str.Format("dx=%d,dy=%d",dx,dy);/MessageBox(str);/成功得到圖片的寬高if(i=0) return false;UINT *buf=new UINTdx*dy;ReadBmp(fname,dx,dy,buf);grade(buf,dx,dy);for(i=0; i<255; i+) m_nHisti = 0;int k;for(i=0; i<dx; i+) for(j=0; j<dy; j+) lpSrc = (

20、unsigned char *)(buf + dx * j + i) ;/ 計(jì)數(shù)加1m_nHist*(lpSrc + 1 )+;return TRUE; / return TRUE unlessyou set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEvoid ShowHist:OnPaint() CPaintDC dc(this); / device context for painting/ TODO: Add your message handler code here/ 循環(huán)變量i

21、nt i;/ 獲取繪制直方圖文本框的標(biāo)簽CWnd* pWnd = GetDlgItem(IDC_Show_Hist);/獲得控件的句柄/ 獲取設(shè)備上下文CDC* pDC = pWnd->GetDC();pWnd->Invalidate();pWnd->UpdateWindow();pDC->Rectangle(0, 0, 400, 203);/畫一個(gè)矩形從而當(dāng)做畫直方圖的區(qū)域/ 創(chuàng)建畫筆對象CPen* pPenRed = new CPen;/ 創(chuàng)建紅色畫筆(用于繪制坐標(biāo)軸)pPenRed->CreatePen(PS_SOLID, 1, RGB(255,0,0);/

22、 選入紅色畫筆,并保存以前的畫筆CPen* pOldPen = pDC->SelectObject(pPenRed);/畫直方圖的坐標(biāo)/ 繪制y軸pDC->MoveTo(20,20);pDC->LineTo(20, 180);/ 繪制x軸pDC->MoveTo(20,180);pDC->LineTo(350, 180);/ 繪制X軸刻度值,x=20276+30,y=20180CString strTemp;strTemp.Format("0");pDC->TextOut(20, 184, strTemp);strTemp.Format(&

23、quot;50");pDC->TextOut(70, 184, strTemp);strTemp.Format("100");pDC->TextOut(120, 184, strTemp);strTemp.Format("150");pDC->TextOut(170, 184, strTemp);strTemp.Format("200");pDC->TextOut(220, 184, strTemp);strTemp.Format("255");pDC->TextOut(27

24、0, 184, strTemp);/ 繪制X軸刻度for (i = 0; i < 256; i += 5)if (i & 1) = 0)/偶數(shù),即10的倍數(shù)pDC->MoveTo(i + 20, 180);pDC->LineTo(i + 20, 184);else/奇數(shù),即 5的奇數(shù)倍數(shù)pDC->MoveTo(i + 20, 180);pDC->LineTo(i + 20, 182); /畫橫縱坐標(biāo)的箭頭 / 繪制X軸箭頭pDC->MoveTo(350, 180);pDC->LineTo(345,175);pDC->MoveTo(350,

25、 180);pDC->LineTo(345,185);/ 繪制Y軸箭頭pDC->MoveTo(20,20);pDC->LineTo(25,25);pDC->MoveTo(20,20);pDC->LineTo(15,25);/ 直方圖中最大計(jì)數(shù)值LONG lMaxCount = 0;/ 計(jì)算最大計(jì)數(shù)值for (i = 0; i <= 255; i +)/ 判斷是否大于當(dāng)前最大值if (m_nHisti > lMaxCount)/ 更新最大值lMaxCount = m_nHisti;/ 輸出最大計(jì)數(shù)值pDC->MoveTo(20, 25);pDC-&

26、gt;LineTo(14, 25);strTemp.Format("%d", lMaxCount);pDC->TextOut(11, 26, strTemp);/ 聲名畫筆對象CPen* pPenBlue = new CPen;/ 創(chuàng)建藍(lán)色畫筆(用于繪制直方圖)pPenBlue->CreatePen(PS_SOLID, 1, RGB(0,0,255);/ 選入藍(lán)色畫筆pDC->SelectObject(pPenBlue);CString str;/str.Format("lMaxCount=%d",lMaxCount);/Message

27、Box(str);/ 判斷是否存在計(jì)數(shù)值/str.Format("%d,%d", m_nHist100,m_nHist200);/MessageBox(str);/成功得到圖片的寬高if(lMaxCount > 0)/ 繪制直方圖for (i = 0; i < 255; i +)pDC->MoveTo(i + 20, 180);pDC->LineTo(i + 20, 180 - (int) (m_nHisti * 160 / lMaxCount);/ 恢復(fù)以前的畫筆pDC->SelectObject(pOldPen);/ 刪除新的畫筆delet

28、e pPenRed;delete pPenBlue;/ Do not call CDialog:OnPaint() for painting messages(4) 顯示均衡化后的直方圖程序代碼ShowBalanHist dlg;void CVCView:OnShowBalanHist() / TODO: Add your command handler code here/MessageBox("ok");CString str;int i,dx,dy;i=GetBmpSize(fname1,&dx,&dy);if(i=0) return;UINT *bu

29、f=new UINTdx*dy;ReadBmp(fname1,dx,dy,buf);dlg.filename = fname1;dlg.buf = buf;dlg.DoModal();delete buf;class ShowBalanHist : public CDialog/ Constructionstruct Old_DlgBal int k;/灰度級int n;/各個(gè)灰度級的像素個(gè)數(shù)float p;/當(dāng)前的灰度級出現(xiàn)的概率float s;/當(dāng)前的灰度級的累積概率int t;/映射關(guān)系;struct New_DlgBal int k;/新的灰度級int n;/相應(yīng)的像素點(diǎn)個(gè)數(shù)float

30、 p;/新的灰度出現(xiàn)的概率;public:ShowBalanHist(CWnd* pParent = NULL); / standard constructorCString filename;/打開的圖像的文件名UINT *buf;/內(nèi)存緩沖區(qū)Old_DlgBal m_oldHist256;/舊的256個(gè)灰度值New_DlgBal m_newHist256;/新的256個(gè)灰度值 . .剩余部分系統(tǒng)已有省略.BOOL ShowBalanHist:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization here

31、CString str;int i,j,dx,dy;unsigned char * lpSrc;CString fname = this->filename;/MessageBox(fname);i = GetBmpSize(fname,&dx,&dy);/str.Format("dx=%d,dy=%d",dx,dy);/MessageBox(str);/成功得到圖片的寬高if(i=0) return false;UINT *buf = new UINTdx*dy;ReadBmp(fname,dx,dy,buf);grade(buf,dx,dy);in

32、t m_Hist256;for(i=0; i<256; i+) m_Histi = 0;/統(tǒng)計(jì)各個(gè)灰度值的像素,統(tǒng)計(jì)概率,累積概率,確定映射關(guān)系,直到獲得新的直方統(tǒng)計(jì)圖float N = dx * dy;/像素總數(shù)int N_ =256;/灰度級最大數(shù)for(i=0; i<dx; i+) for(j=0; j<dy; j+) lpSrc = (unsigned char *)(buf + dx * j + i) ;/ 計(jì)數(shù)加1m_Hist*(lpSrc + 1 )+;int sum=0;for(i=0; i<256; i+) sum+=m_Histi;/str.Form

33、at("%d", sum);/注:以上沒有錯(cuò)/MessageBox(str);/str.Format("dx*dy=%d", dx*dy);/注:以上沒有錯(cuò)/MessageBox(str);m_oldHist0.n = m_Hist0;m_oldHist0.p = m_Hist0 / N; m_oldHist0.s = m_oldHist0.p;m_oldHist0.t = (int)(m_oldHist0.s * (N_ - 1) + 0.5);for(i=1; i<=255; i+) m_oldHisti.n = m_Histi;/統(tǒng)計(jì)某個(gè)灰度

34、級像素個(gè)數(shù)m_oldHisti.p = m_Histi / N;/某個(gè)灰度級的像素頻率m_oldHisti.s = m_oldHisti.p + m_oldHisti-1.s;/累積概率m_oldHisti.t = (int)(m_oldHisti.s * (N_ - 1) + 0.5); /映射關(guān)系/根據(jù)映射關(guān)系計(jì)算新的灰度級對應(yīng)的像素個(gè)數(shù)for(i=0; i<=255; i+) m_newHistm_oldHisti.t.n += m_oldHisti.n;/新的灰度級對應(yīng)的像素的個(gè)數(shù)m_newHistm_oldHisti.t.p += m_oldHisti.p;/新的灰度級對應(yīng)的像

35、素頻率return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEvoid ShowBalanHist:OnPaint() CPaintDC dc(this); / device context for painting/ TODO: Add your message handler code here/ 循環(huán)變量int i;/ 獲取繪制直方圖文本框的標(biāo)簽CWnd* pWnd = GetDlgItem(IDC_SHOW_NE

36、W_HIST);/獲得控件的句柄/ 獲取設(shè)備上下文CDC* pDC = pWnd->GetDC();pWnd->Invalidate();pWnd->UpdateWindow();pDC->Rectangle(0, 0, 400, 203);/畫一個(gè)矩形從而當(dāng)做畫直方圖的區(qū)域/ 創(chuàng)建畫筆對象CPen* pPenRed = new CPen;/ 創(chuàng)建紅色畫筆(用于繪制坐標(biāo)軸)pPenRed->CreatePen(PS_SOLID, 1, RGB(255,0,0);/ 選入紅色畫筆,并保存以前的畫筆CPen* pOldPen = pDC->SelectObjec

37、t(pPenRed);/畫直方圖的坐標(biāo)/ 繪制y軸pDC->MoveTo(20,20);pDC->LineTo(20, 180);/ 繪制x軸pDC->MoveTo(20,180);pDC->LineTo(350, 180);/ 繪制X軸刻度值,x=20276+30,y=20180CString strTemp;strTemp.Format("0");pDC->TextOut(20, 184, strTemp);strTemp.Format("50");pDC->TextOut(70, 184, strTemp);st

38、rTemp.Format("100");pDC->TextOut(120, 184, strTemp);strTemp.Format("150");pDC->TextOut(170, 184, strTemp);strTemp.Format("200");pDC->TextOut(220, 184, strTemp);strTemp.Format("255");pDC->TextOut(270, 184, strTemp);/ 繪制X軸刻度for (i = 0; i < 256; i

39、+= 5)if (i & 1) = 0)/偶數(shù),即10的倍數(shù)pDC->MoveTo(i + 20, 180);pDC->LineTo(i + 20, 184);else/奇數(shù),即 5的奇數(shù)倍數(shù)pDC->MoveTo(i + 20, 180);pDC->LineTo(i + 20, 182); /畫橫縱坐標(biāo)的箭頭 / 繪制X軸箭頭pDC->MoveTo(350, 180);pDC->LineTo(345,175);pDC->MoveTo(350, 180);pDC->LineTo(345,185);/ 繪制Y軸箭頭pDC->MoveT

40、o(20,20);pDC->LineTo(25,25);pDC->MoveTo(20,20);pDC->LineTo(15,25);/ 直方圖中最大計(jì)數(shù)值LONG lMaxCount = 0;/ 計(jì)算最大計(jì)數(shù)值/ 輸出最大計(jì)數(shù)值pDC->MoveTo(20, 25);pDC->LineTo(14, 25);/ 聲名畫筆對象CPen* pPenBlue = new CPen;/ 創(chuàng)建藍(lán)色畫筆(用于繪制直方圖)pPenBlue->CreatePen(PS_SOLID, 1, RGB(0,0,255);/ 選入藍(lán)色畫筆pDC->SelectObject(pP

41、enBlue);CString str;/ 判斷是否存在計(jì)數(shù)值/在此處畫均衡化后的直方圖/ 計(jì)算最大計(jì)數(shù)值for (i = 0; i <= 255; i +)/ 判斷是否大于當(dāng)前最大值if (m_newHisti.n > lMaxCount)/ 更新最大值lMaxCount = m_newHisti.n;strTemp.Format("%d", lMaxCount);pDC->TextOut(11, 26, strTemp);/str.Format("lMaxCount=%d",lMaxCount);/MessageBox(str);if(lMaxCount > 0)/ 繪制直方圖for (i = 0; i <= 255; i +)pDC->MoveTo(i + 20, 180);pDC->LineTo(i + 20, 180 - (int) (m_

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論