




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用VC+实现直方图均衡化一试验目地:(1)、学会了解C+是使用;(2)、学会用C+解决图像处理问题(3)、学会使用C+实现直方图均衡化二、实验内容:用VC+实现直方图均衡化;三、实验步骤:1、首先建立一个工程。打开VC+6.0,单击 文件【files】新建【new】工程【projects】在打开的projects 下选择MFC App Wizard exe在project name 下输入自己的工程名例如(Zhifangtujunhenghua)单击【ok】在打开的对话框中选择基于单文档【single document】在第四步 “MFC App Wizard step 4 of 6”面板中删掉【隐藏工具栏】和【打印和打印预览】两个选项,之后的全部选择默认,单击finish,出现一个“New Project Information”窗口,单击【ok】。一个简单的工程框架就建好了。2、现在我们正式开始在新建工程Zhifangtujunhenghua中进行编程实现bmp位图的直方图均衡化。点击左边框中的【ResourceView】框找到【Menu】点开,双击Menu下的图标,在右面的显示框中创建两个菜单: 打开 ID: ID_FILE_OPEN 直方图均衡化 ID: ID_ZHIFANGTU 显示原图 ID: IDM_YUANTU3、给这两个菜单建立类向导。在右边的窗口中右击“打开”,选择“建立类向导”,然后在打开的对话框中操作,“Class name”选择“CZhifangtujunhenghuaView” ”Object IDs”中选择“ID_FILE_OPEN” “Message”中选择“COMMAND”,点击“Add Function”键就会在“Member functions”中如下图1显示,然后点击“Edit Code”,在自动生成的OnFileOpen函数中编写代码:void CZhifangtujunhenghuaView:OnFileOpen() / TODO: Add your command handler code hereCFileDialog fileDlg(true);fileDlg.m_ofn.lpstrTitle=图片打开对话框;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”选择“CShowpictureView”。点击“Edit Code”,在自动生成的“OnYuantu”函数中编写代码:Void CZhifangtujunhenghuaView:OnYuantu() / TODO: Add your command handler code herem_Dib.LoadFile(m_fileName);Invalidate();4、同理,操作“直方图均衡化”选择“CZhifangtujunhenghuaView”。点击“Edit Code”,在自动生成的“OnZhifangtu”函数中编写代码:void CZhifangtujunhenghuaView:OnZhifangtu() / TODO: Add your command handler code hereif (m_Dib.IsValid()m_Dib.fenbujunhenghua();Invalidate();5、创建一个处理位图的类CDib,且CDib类是由CObject类派生出来的。点击工程菜单栏中的插入【insert】【insert class】类类型选“Generic Class”, 类名称填“CDib” 【ok】。可以看见工程窗口的Class View 中多了一个 CDib 类;点开CDib类的头文件,输入以下代码,注意变量可以直接复制,声明的函数不要直接复制(在CDib类右击选择“Add member function”,输入函数类型和函数名)。class CDib: public CObject public: RGBQUAD * m_pRGB;BYTE * m_pData;UINT m_numberOfColors;bool m_valid;BITMAPFILEHEADER bitmapFileHeader;/定义了一个文件头结构体的对象BITMAPINFOHEADER * m_pBitmapInfoHeader;/定义了一个指向信息头的结构体指针BITMAPINFO * m_pBitmapInfo;/定义了一个结构体指针,BITMAPINFO是一个包含有信息头,和调色板的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 * GetInfo();BYTE * GetData();RGBQUAD * GetRGB();UINT GetWidth();UINT GetHeight();UINT GetNumberOfColors();DWORD GetSize();bool IsValid();char * GetFileName();CDib();virtual CDib();6、对CDib类中的函数定义,找到Dib.cpp 输入代码:CDib:CDib()m_numberOfColors=0;size = 0;m_valid=0;byBitCount=0;dwWidthBytes=0;CDib:CDib()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;UINT 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/若不是上面的情况,则直接返回颜色数numberOfColors=(int)m_pBitmapInfoHeader-biClrUsed;return numberOfColors;UINT CDib:GetHeight()return (UINT)m_pBitmapInfoHeader-biHeight;UINT CDib:GetWidth()return (UINT)m_pBitmapInfoHeader-biWidth;RGBQUAD * CDib:GetRGB()return m_pRGB;BYTE * CDib:GetData()return m_pData;BITMAPINFO * CDib:GetInfo()return m_pBitmapInfo;WORD CDib:DIBNumColors(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 *dibFileName)strcpy(m_fileName,dibFileName);/将路径名称拷贝到m_fileName之中CFile dibFile(m_fileName,CFile:modeRead);/创建CFile类对象,只读方式dibFile.Read(void *)&bitmapFileHeader,sizeof(BITMAPFILEHEADER);/读取文件头的内容if(bitmapFileHeader.bfType = 0x4d42)/判断是否为bmp格式,单步调试你会发现,此时的bfType值DWORD fileLength = dibFile.GetLength();/读取文件的大小,你可以试试跟踪此值来看看它是否和你要打开的图片大小一致size = fileLength - sizeof(BITMAPFILEHEADER);/文件大小-文件头结构体的大小,此时你会发现,文件头的大小的确是14字节pDib = (BYTE *)GlobalAllocPtr(GMEM_MOVEABLE,size);/详见说明(2)dibFile.Read(void *)pDib,size);/通过读取,把读出的数据存入刚才分配的内存之中dibFile.Close();/文件操作完成之后关闭文件m_pBitmapInfo=(BITMAPINFO *)pDib;/BITMAPINFO结构体指针指向该内存m_pBitmapInfoHeader = (BITMAPINFOHEADER *)pDib;/信息头指向该内存m_pRGB = (RGBQUAD *)(pDib + m_pBitmapInfoHeader-biSize);/调色板指针指向该内存的调色板部分。因为pDib原本指向信息头,偏移40字节(信息头结构体的大小)之后便到了调色板部分,因此用加法来实现指针的偏移int m_numberOfColors = GetNumberOfColors();/调用GetNumberOfColors函数来得到颜色数if(m_pBitmapInfoHeader-biClrUsed = 0)m_pBitmapInfoHeader-biClrUsed=m_numberOfColors;/把颜色数赋予biClrUsed之中DWORD colorTableSize=m_numberOfColors * sizeof(RGBQUAD);/用每个调色板结构体大小乘以颜色数量,得到调色板的大小m_pData = pDib + m_pBitmapInfoHeader-biSize+ colorTableSize;/这时候代表把m_pData指针指向实际图像数据了if (m_pRGB = (RGBQUAD *)m_pData) / 如果调色板指针位置和实际图像位置指针指向位置相同,那就代表没有调色板m_pRGB = NULL;/指针赋予空m_pBitmapInfoHeader-biSizeImage = GetSize();/赋予实际位图的大小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 dibFile(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; /灰度计数int wide,height; /原图长、宽 /变量初始化memset(huidu,0,sizeof(huidu);wide=this-GetWidth();height=this-GetHeight();LPBYTE temp1=new BYTEwide*height; /新图像缓冲区 /复制原图像到缓存 图像memcpy(temp1,m_pData,wide*height);for(i=0;iheight;i+)for(j=0;jwide;j+)unsigned char temp=temp1wide*i+j;/灰度统计计数huidutemp+;/计算灰度分布密度for(i=0;iGetData();zhifangtu(fps_R);for(i=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025技术顾问聘用合同书范本
- 敏捷人才发展模式-洞察及研究
- 2025公司租赁合同模板
- 2025股权激励计划合同股权转让操作流程
- 2025工程合同担保书(标准版)
- 冲压返修人员前安全培训课件
- 冲压安全生产培训心得
- 2025年二手房东租赁合同范本
- 2025年河北省农产品采购合同模板
- 冲击波碎石科课件
- 浙江名校协作体(G12)2025年9月2026届高三返校联考物理(含答案)
- 廉租房承包物业合同范本
- 中小学心理健康c证考试试题及答案
- 2025-2026秋季中小学第一学期升旗仪式22周校长演讲稿:第1周 烽火记忆照前路秋风为序启新程
- 污水厂工艺知识培训课件
- 2025秋人教部编版二年级上册语文教学计划
- 科学护肤知识课件
- 2025年黑龙江全国导游人员资格考试(全国导游基础知识、地方导游基础知识)历年参考题库含答案详解(5套)
- 分级护理落实率
- DB4419T 23-2024 建设工程施工无废工地管理规范
- 幼儿园改造提升项目可行性研究报告
评论
0/150
提交评论