版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用VC+實(shí)現(xiàn)直方圖均衡化一試驗(yàn)?zāi)康兀海?)、學(xué)會(huì)了解 C+ 是使用;(2)、學(xué)會(huì)用 C+ 解決圖像處理問(wèn)題(3)、學(xué)會(huì)使用 C+ 實(shí)現(xiàn)直方圖均衡化 二、實(shí)驗(yàn)內(nèi)容:用 VC+ 實(shí)現(xiàn)直方圖均衡化 ;三、實(shí)驗(yàn)步驟:1 首先建立一個(gè)工程。打開VC+6.0,單擊 文件【files 新建【new】f工程【projects】在打開的 projects 下選擇 MFC App Wizard exe宀在 project name 下輸入自己的工程名例如(Zhifangtujunhenghua )宀單擊【ok】宀在打開的對(duì)話框中選擇基于單文檔【single document】T在第四步“ MFC App Wiza
2、rd step 4 of 6 ”面板中刪掉【隱藏工具欄】和【打印和打印預(yù)覽】?jī)蓚€(gè)選項(xiàng),之后的全部選擇默認(rèn),單擊 finish ,出現(xiàn)一個(gè)“ New Project Information ”窗 口,單擊【ok】。一個(gè)簡(jiǎn)單的工程框架就建好了。2、現(xiàn)在我們正式開始在新建工程 Zhifangtujunhenghua 中進(jìn)行編程實(shí)現(xiàn) bmp 位圖的直方圖均 衡化。點(diǎn)擊左邊框中的【ResourceView】框找到【Menu】點(diǎn)開,雙擊 Menu 下的圖標(biāo),在右 面的顯示框中創(chuàng)建兩個(gè)菜單:打開ID:ID_FILE_OPEN直方圖均衡化ID: ID_ZHIFANGTU顯示原圖ID:IDM_YUANTU3、給
3、這兩個(gè)菜單建立類向?qū)?。在右邊的窗口中右擊“打開”,選擇“建立類向?qū)А?,然后在打開的對(duì)話框中操作, “Class name選擇CZhifangtujunhenghuaView ” Object IDs 中選 擇“ ID_FILE_OPEN ”Message中選擇“ COMMAND ”,點(diǎn)擊“ Add Function ” 鍵就會(huì)在Member fun ctio ns 中如下圖 1 顯示,然后點(diǎn)擊Edit Code ”,在自動(dòng)生成的 On FileOpen 函數(shù)中編寫代碼:void CZhifangtujunhenghuaView:OnFileOpen()/ TODO: Add your com
4、mand handler code hereCFileDialog fileDlg(true); fileDlg.m_ofn.lpstrTitle= 圖片打開對(duì)話框 ;fileDlg.m_ofn.lpstrFilter=BMP Files(*.bmp)0*.bmp00; if(IDOK=fileDlg.DoModal()m_fileName.Format (%s,fileDlg.GetPathName();m_Dib.LoadFile(m_fileName);Invalidate();同理,操作 顯示原圖:Class name選擇 CShowpictureVie w。點(diǎn)擊“Edit Code
5、在自動(dòng)生 成的“OnYuantu”函數(shù)中編寫代碼:Void CZhifangtujunhenghuaView:OnYuantu()/ TODO: Add your command handler code here m_Dib.LoadFile(m_fileName);Invalidate();4、同理, 操作 “直方圖均衡化” 選擇“ CZhifangtujunhenghuaView ”。點(diǎn)擊 “Edit Code ”,在自動(dòng)生成的“ OnZhifangtu ”函數(shù)中編寫代碼:void CZhifangtujunhenghuaView:OnZhifangtu()/ TODO: Add you
6、r command handler code hereif (m_Dib.IsValid()m_Dib.fenbujunhenghua();Invalidate(); 5、創(chuàng)建一個(gè)處理位圖的類CDib ,且 CDib 類是由 CObject 類派生出來(lái)的。點(diǎn)擊工程菜單欄中的插入【in sert】宀【insert classic類類型選Generic Class”,宀類名稱填CDib ” 宀【ok】??梢钥匆姽こ檀翱诘?Class View 中多了一個(gè) CDib 類;點(diǎn)開 CDib 類的頭文件,輸入以下代碼, 注意變量可以直接復(fù)制, 聲明的函數(shù)不要直接復(fù)制 (在 CDib 類右擊選擇 “Add
7、memberfunction ”,輸入函數(shù)類型和函數(shù)名) 。class CDib: public CObjectpublic:RGBQUAD * m_pRGB;BYTE * m_pData;UINT m_numberOfColors;bool m_valid;BITMAPFILEHEADER bitmapFileHeader;/ 定義了一個(gè)文件頭結(jié)構(gòu)體的對(duì)象BITMAPINFOHEADER * m_pBitmapInfoHeader;/ 定義了一個(gè)指向信息頭的結(jié)構(gòu)體指針 BITMAPINFO *m_pBitmapInfo;/ 定義了一個(gè)結(jié)構(gòu)體指針, BITMAPINFO 是一個(gè)包含有 信息頭,
8、和調(diào)色板的BYTE * pDib;DWORD size;char m_fileName256;public:int dwWidthBytes;int byBitCount;void fenbujunhenghua();void zhifangtu(float *tongji);void SaveFile(const CString filename);void LoadFile(const char * dibFileName);WORD PaletteSize(LPBYTE lpDIB);WORD DIBNumColors(LPBYTE lpDIB); BITMAPINFO * GetInf
9、o();BYTE * GetData();RGBQUAD * GetRGB();UINT GetWidth();UINT GetHeight();UINT GetNumberOfColors();DWORD GetSize(); bool IsValid(); char * GetFileName(); CDib(); virtual CDib();6、對(duì) CDib 類中的函數(shù)定義,找到 Dib.cpp 輸入代碼: CDib:CDib()m_numberOfColors=0; size = 0; m_valid=0; byBitCount=0; dwWidthBytes=0;CDib:CDib
10、()GlobalFreePtr(m_pBitmapInfo);char * CDib:GetFileName()return m_fileName;bool CDib:IsValid()return m_valid;DWORD CDib:GetSize()if (m_pBitmapInfoHeader-biSizeImage!=0)return m_pBitmapInfoHeader-biSizeImage;elseDWORD height = (DWORD)GetHeight();DWORD width = (DWORD)GetWidth(); return height * width;U
11、INT CDib:GetNumberOfColors()int numberOfColors;if (m_pBitmapInfoHeader-biClrUsed=0)&(m_pBitmapInfoHeader-biBitCountbiBitCount)case 1: numberOfColors = 2;break;case 4: numberOfColors = 16;break; case 8: numberOfColors = 256;break;else/若不是上面的情況,則直接返回顏色數(shù)numberOfColors=(int)m_pBitmapInfoHeader-biClr
12、Used;return numberOfColors;UINT CDib:GetHeight()return (UINT)m_pBitmapInfoHeader-biHeight;UINT CDib:GetWidth()return (UINT)m_pBitmapInfoHeader-biWidth;RGBQUAD * CDib:GetRGB()return m_pRGB;256 色BYTE * CDib:GetData()return m_pData;BITMAPINFO * CDib:GetInfo()return m_pBitmapInfo;WORD CDib:DIBNumColors(
13、LPBYTE lpDIB)WORD wBitCount;/DIB bit countwBitCount = (LPBITMAPCOREHEADER)lpDIB)-bcBitCount; switch(wBitCount)case 1: return 2;case 4: return 16;case 8: return 256;default:return 0;WORD CDib:PaletteSize(LPBYTE lpDIB)return(DIBNumColors(lpDIB)*sizeof(RGBTRIPLE);void CDib:LoadFile(const char *dibFileN
14、ame)strcpy(m_fileName,dibFileName);/ 將路徑名稱拷貝到 m_fileName 之中 CFiledibFile(m_fileName,CFile:modeRead);/ 創(chuàng)建 CFile 類對(duì)象,只讀方式 dibFile.Read(void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER);/ 讀取文件頭的 內(nèi)容if(bitmapFileHeader.bfType = 0 x4d42)/ 判斷是否為 bmp 格式, 單步調(diào)試你會(huì)發(fā)現(xiàn), 此時(shí) 的bfType 值DWORD fileLength = dibFile.G
15、etLength();/ 讀取文件的大小,你可以試試跟蹤此值 來(lái)看看它是否和你要打開的圖片大小一致size = fileLength - sizeof(BITMAPFILEHEADER);/ 文件大小 -文件頭結(jié)構(gòu)體的大小,此時(shí)你會(huì)發(fā)現(xiàn),文件頭的大小的確是 14 字節(jié)pDib = (BYTE *)GlobalAllocPtr(GMEM_MOVEABLE,size);/ 詳見說(shuō)明( 2)dibFile.Read(void *)pDib,size);/ 通過(guò)讀取,把讀出的數(shù)據(jù)存入剛才分配的內(nèi)存之中dibFile.Close();/ 文件操作完成之后關(guān)閉文件m_pBitmapInfo=(BITMAP
16、INFO *)pDib;/BITMAPINFO 結(jié)構(gòu)體指針指向該內(nèi)存m_pBitmapInfoHeader = (BITMAPINFOHEADER *)pDib;/ 信息頭指向該內(nèi)存 m_pRGB = (RGBQUAD*)(pDib + m_pBitmapInfoHeader-biSize);/ 調(diào)色板指針指向 該內(nèi)存的調(diào)色板部分。因?yàn)?pDib 原本指向信息頭, 偏移 40 字節(jié)(信息頭結(jié)構(gòu)體的大小) 之 后便到了調(diào)色板部分,因此用加法來(lái)實(shí)現(xiàn)指針的偏移int m_numberOfColors = GetNumberOfColors();/ 調(diào)用 GetNumberOfColors 函數(shù)來(lái)得
17、到顏色數(shù)if(m_pBitmapInfoHeader-biClrUsed = 0)m_pBitmapInfoHeader-biClrUsed=m_numberOfColors;/ 把 顏 色 數(shù) 賦 予 biClrUsed之中DWORD colorTableSize=m_numberOfColors * sizeof(RGBQUAD);/ 用每個(gè)調(diào)色板結(jié) 構(gòu)體大小乘以顏色數(shù)量,得到調(diào)色板的大小m_pData = pDib + m_pBitmapInfoHeader-biSize+ colorTableSize;/ 這時(shí)候代表把m_pData 指針指向?qū)嶋H圖像數(shù)據(jù)了if (m_pRGB = (R
18、GBQUAD *)m_pData) / 如果調(diào)色板指針位置和實(shí)際圖像位置 指針指向位置相同,那就代表沒有調(diào)色板m_pRGB = NULL;/ 指針賦予空m_pBitmapInfoHeader-biSizeImage = GetSize();/ 賦予實(shí)際位圖的大小m_valid = true;else/如果不是 bmp 位圖則失敗m_valid = false;AfxMessageBox(This isnt a bitmap file!);void CDib:SaveFile(const CString filename)strcpy(m_fileName,filename);CFile dib
19、File(m_fileName,CFile:modeCreate|CFile:modeWrite);dibFile.Write(void *)&bitmapFileHeader,sizeof(BITMAPFILEHEADER); dibFile.Write(void*)pDib,size);dibFile.Close();void CDib:zhifangtu(float *tongji)int i;int j;int huidu256; /灰度計(jì)數(shù)int wide,height;/原圖長(zhǎng)、寬/變量初始化memset(huidu,0,sizeof(huidu);wide=this-Ge
20、tWidth();height=this-GetHeight();LPBYTE temp1=new BYTEwide*height;/新圖像緩沖區(qū)/復(fù)制原圖像到緩存 圖像memcpy(temp1,m_pData,wide*height);for(i=0;iheight;i+)for(j=0;jwide;j+)unsigned char temp=temp1wide*i+j;/灰度統(tǒng)計(jì)計(jì)數(shù)huidutemp+;/計(jì)算灰度分布密度f(wàn)or(i=0;iGetData();zhifangtu(fps_R);for(i=0;i256;i+)if(i=0)temp_r0=fps_R0;elsetemp_ri=temp_ri-1+fps_Ri;nNs_Ri=(int)(2
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融幫扶框架協(xié)議書
- 律師委托代理協(xié)議包干
- 2025版?zhèn)€人獨(dú)資企業(yè)股權(quán)置換及轉(zhuǎn)讓合同范本2篇
- 2025版二手房買賣退房條件協(xié)議書
- 2025-2030全球液體金合歡烯橡膠行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球變頻用移相變壓器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球國(guó)防輕型戰(zhàn)術(shù)車輛行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球高性能碳纖維材料行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 食堂炊事員聘用協(xié)議范本
- 2025年度個(gè)人自有房產(chǎn)租賃轉(zhuǎn)租委托協(xié)議3篇
- 高中英語(yǔ)人教版必修第一二冊(cè)語(yǔ)境記單詞清單
- 政府機(jī)關(guān)保潔服務(wù)投標(biāo)方案(技術(shù)方案)
- HIV感染者合并慢性腎病的治療指南
- 診所抗菌藥物管理制度
- 招標(biāo)監(jiān)督報(bào)告
- 項(xiàng)目立項(xiàng)申請(qǐng)書
- 干部職工文明守則和行為規(guī)范(完整版)
- 世界古代史-對(duì)接選擇性必修 高考?xì)v史一輪復(fù)習(xí)
- 格式塔心理學(xué)與文藝心理學(xué)
- (汽車制造論文)機(jī)器人在汽車制造中應(yīng)用
- 食管癌護(hù)理查房20352
評(píng)論
0/150
提交評(píng)論