直方图图像处理报告.doc_第1页
直方图图像处理报告.doc_第2页
直方图图像处理报告.doc_第3页
直方图图像处理报告.doc_第4页
直方图图像处理报告.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图像处理上机报告 学号: 班级: 姓名: 指导老师上机目标一: 实现bmp图片的直方图的显示。目标分析:要实现目标一,首先需做到的时对bmp图片的读取与显示;然后才能对图片进行灰度统计,如果是彩色图片可以先将之灰度化再统计,或者直接对其R、G、B三个直方图进行分别显示。在此我做的是选择将彩色图片进行灰度化然后再统计灰度值,实现直方图的显示。大体算法步骤:1、 对bmp图读取与显示用的是何兴恒老师的程序(具体分析在下部分)。2、 如果是彩色图片则对其进行灰度化,然后统计其灰度值。3、 对图片实行灰度化统计后,进行直方图的显示。算法及数据结构: 算法步骤1: Bmp图的读取显示:GetBmpSize(fname,&dx,&dy)获取图像大小;UINT *buf=new UINTdx*dy; ReadBmp(fname,dx,dy,buf);申请一块动态内存buf大小为dx*dy来实现图像读取;MDBUF=buf; mdr-write_video(0,0,dx,dy,buf) ;mdr-swap();将图片放入内存并显示出来。具体函数:onFileOpen(); 算法步骤2:彩色图片的灰度化。定义一个UCHAR型的指针变量c用来指向内存MDBUF;如c0、c1、c2、c3分别表示的是第一个像素点的B、G、R、A值。利用灰度化公式0.11*B+0.59*G+0.30R来实现。通过实现dx*dy(图像长宽积)次循环。以下为部分代码: for (j=0;jclear_win();UINT *buf=new UINTdx*dy;ReadBmp(fname,dx,dy,buf);MDBUF=buf;mdr-write_video(0,0,dx,dy,buf); mdr-swap();/MDBUF=buf;int j=0;int k=0; UCHAR *c=(UCHAR *)buf;for(i=0;i256;i+)m_dShow.m_DHisti=0; for(j=0;jdx*dy;j+)k=(11*c0+59*c1+30*c2)/100;m_dShow.m_DHistk+;/c+=4;/void CMFC_HIST2View:OnHthShow() /灰度化并显示/ TODO: Add your command handler code hereif(MDBUF=NULL)AfxMessageBox(没有图片!);return; int j=0; / UINT *buf=new UINTx1*y1;UCHAR *c=(UCHAR *)MDBUF; for (j=0;jwrite_video(500,0,x1,y1,MDBUF);mdr-swap(); mdr-winx0=0;/void CMFC_HIST2View:OnHistShow() /显示直方图控件/ TODO: Add your command handler code here if(MDBUF=NULL)AfxMessageBox(没有图片!);return;BeginWaitCursor();/ 创建对话框/ 初始化变量/ 显示对话框if (m_dShow.DoModal() != IDOK)/ 返回return;/ 恢复光标EndWaitCursor();/void CDialogHist:OnPaint() /画直方图CPaintDC dc(this); / device context for paintingint i;/ 获取绘制直方图文本框的标签CWnd* pWnd = GetDlgItem(IDC_STATIC_HIST);/ 获取设备上下文CDC* pDC = pWnd-GetDC();pWnd-Invalidate();pWnd-UpdateWindow();/ 创建画笔对象CPen* pPenRed = new CPen;/ 创建红色画笔(用于绘制坐标轴)pPenRed-CreatePen(PS_SOLID, 1, RGB(255,0,0);/ 选入红色画笔,并保存以前的画笔CPen* pOldPen = pDC-SelectObject(pPenRed);/ 绘制坐标轴pDC-MoveTo(10,0);/ 绘制垂直轴pDC-LineTo(10, 280);/ 绘制水平轴pDC-LineTo(320, 280);/绘制X轴刻度值CString strTemp;strTemp.Format(0);pDC-TextOut(8, 288, strTemp);strTemp.Format(50);pDC-TextOut(58, 288, strTemp);strTemp.Format(100);pDC-TextOut(105, 288, strTemp);strTemp.Format(150);pDC-TextOut(155, 288, strTemp);strTemp.Format(200);pDC-TextOut(205, 288, strTemp);strTemp.Format(255);pDC-TextOut(260, 288, strTemp);/ 绘制X轴刻度for (i = 0; i MoveTo(i + 10, 280);pDC-LineTo(i + 10, 288);else if(i % 10)=0)/ 5的奇数倍数pDC-MoveTo(i + 10, 280);pDC-LineTo(i + 10, 286);else pDC-MoveTo(i+10,280);pDC-LineTo(i+10,284);/ 绘制X轴箭头pDC-MoveTo(315,285);pDC-LineTo(320,280);pDC-LineTo(315,285);/ 绘制Y轴箭头pDC-MoveTo(5,5);pDC-LineTo(10,0);pDC-LineTo(15,5);/ 直方图中最大计数值LONG lMaxCount = 0;/ 计算最大计数值for (i = 0; i lMaxCount)/ 更新最大值lMaxCount = m_DHisti;/ 输出最大计数值pDC-MoveTo(10, 10);pDC-LineTo(14, 10);strTemp.Format(%d, lMaxCount);pDC-TextOut(11, 10, strTemp);/ 声名画笔对象CPen* pPenBlue = new CPen;/ 创建蓝色画笔(用于绘制直方图)pPenBlue-CreatePen(PS_SOLID, 1, RGB(0,0,255);/ 选入蓝色画笔pDC-SelectObject(pPenBlue);/ 判断是否存在计数值if(lMaxCount 0)/ 绘制直方图for (i = 0; i MoveTo(i + 10, 280);pDC-LineTo(i + 10, 281 - (int) (m_DHisti / (lMaxCount/260);/ 恢复以前的画笔pDC-SelectObject(pOldPen);/ 删除新的画笔delete pPenRed;delete pPenBlue;/ TODO: Add your message handler code here/ Do not call CDialog:OnPaint() for painting messages/void CMFC_HIST2View:GetXS(int y,int x)/取得x、y点的RGBA值 int i=x,j=y;if (i=0&j=0)b0=b1=b2=b3=b4=b6=B00; g0=g1=g2=g3=g4=g6=G00;r0=r1=r2=r3=r4=r6=R00;a0=a1=a2=a3=a4=a6=A00;b5=B01;g5=G01;r5=R01;a5=A01;b7=B10;g7=G10;r7=R10;a7=A10; b8=B11;g8=G11;r8=R11;a8=A11;else if (i=x1&j=0)b0=b1=b2=b5=b4=b8=B0x1-1;g0=g1=g2=g5=g4=g8=G0x1-1;r0=r1=r2=r5=r4=r8=R0x1-1;a0=a1=a2=a5=a4=a8=A0x1-1;b5=B0x1-2;g5=G0x1-2;r5=R0x1-2;a5=A0x1-2;b7=B1x1-1;g7=G1x1-1;r7=R1x1-1;a7=A1x1-1;b6=B1x1-2;g6=G1x1-2;r6=R1x1-2;a6=A1x1-2;else if (i=0&j=y1-1)b0=b3=b6=b7=b8=b4=By1-10;g0=g3=g6=g7=g8=g4=Gy1-10;r0=r3=r6=r7=r8=r4=Ry1-10;a0=a3=a6=a7=a8=a4=Ay1-10;b1=By1-20;g1=Gy1-20;r1=Ry1-20;a1=Ay1-20;b2=By1-21;g2=Gy1-21;r2=Ry1-21;a2=Ay1-21;b5=By1-11;g5=Gy1-11;r5=Ry1-11;a5=Ay1-11;else if (i=x1-1&j=y1-1)b2=b5=b6=b7=b8=b4=By1-1x1-1;g2=g5=g6=g7=g8=g4=Gy1-1x1-1;r2=r5=r6=r7=r8=r4=Ry1-1x1-1;a2=a5=a6=a7=a8=a4=Ay1-1x1-1;b0=By1-2x1-2;g0=Gy1-2x1-2;r0=Ry1-2x1-2;a0=Ay1-2x1-2;b1=By1-2x1-1;g1=Gy1-2x1-1;r1=Ry1-2x1-1;a1=Ay1-2x1-1;b3=By1-1x1-2;g3=Gy1-1x1-2;r3=Ry1-1x1-2;a3=Ay1-1x1-2;else if (j=0&(i!=0&i!=x1-1)b0=b1=b2=b4=B0i;g0=g1=g2=g4=G0i;r0=r1=r2=r4=R0i;a0=a1=a2=a4=A0i;b3=B0i-1;g3=G0i-1;r3=R0i-1;a3=A0i-1;b5=B0i+1;g5=G0i+1;r5=R0i+1;a5=A0i+1;b6=B1i-1;g6=G1i-1;r6=R1i-1;a6=A1i-1;b7=B0i;g7=G0i;r7=R0i;a7=A0i;b8=B0i+1;g8=G0i+1;r8=R0i+1;a8=A0i+1;else if (i=0&(j!=0&j!=y1-1)b0=b3=b6=b4=Bj0;g0=g3=g6=g4=Gj0;r0=r3=r6=r4=Rj0;a0=a3=a6=a4=Aj0;b1=Bj-10;g1=Gj-10;r1=Rj-10;a1=Aj-10;b2=Bj-11;g2=Gj-11;r2=Rj-11;a2=Aj-11;b5=Bj1;g5=Gj1;r5=Rj1;a5=Aj1;b7=Bj+10;g7=Gj+10;r7=Rj+10;a7=Aj+10;b8=Bj+11;g8=Gj+11;r8=Rj+11;a8=Aj+11;else if (i=x1-1&(j!=0&j!=y1-1)b2=b5=b8=b4=Bji;g2=g5=g8=g4=Gji;r2=r5=r8=r4=Rji;a2=a5=a8=a4=Aji;b0=Bj-1i-1;g0=Gj-1i-1;r0=Rj-1i-1;a0=Aj-1i-1;b1=Bj-1i;g1=Gj-1i;r1=Rj-1i;a1=Aj-1i;b3=Bji-1;g3=Gji-1;r3=Rji-1;a3=Aji-1;b6=Bj+1i-1;g6=Gj+1i-1;r6=Rj+1i-1;a6=Aj+1i-1;b7=Bj+1i;g7=Gj+1i;r7=Rj+1i;a7=Aj+1i;else if(j=y1-1&(i!=0&i!=x1-1)b6=b7=b8=b4=Bji;g6=g7=g8=g4=Gji;r6=r7=r8=r4=Rji;a6=a7=a8=a4=Aji;b0=Bj-1i-1;g0=Gj-1i-1;r0=Rj-1i-1;a0=Aj-1i-1;b1=Bj-1i;g1=Gj-1i;r1=Rj-1i;a1=Aj-1i;b2=Bj-1i+1;g2=Gj-1i+1;r2=Rj-1i+1;a2=Aj-1i+1;b3=Bji-1;g3=Gji-1;r3=Rji-1;a3=Aji-1;b5=Bji+1;g5=Gji+1;r5=Rji+1;a5=Aji+1;else if(i0&i0&jy1-1)b0=Bj-1i-1;g0=Gj-1i-1;r0=Rj-1i-1;a0=Aj-1i-1;b1=Bj-1i;g1=Gj-1i;r1=Rj-1i;a1=Aj-1i;b2=Bj-1i+1;g2=Gj-1i+1;r2=Rj-1i+1;a2=Aj-1i+1;b3=Bji-1;g3=Gji-1;r3=Rji-1;a3=Aji-1;b4=Bji;g4=Gji;r4=Rji;a4=Aji;b5=Bji+1;g5=Gji+1;r5=Rji+1;a5=Aji+1;b6=Bj+1i-1;g6=Gj+1i-1;r6=Rj+1i-1;a6=Aj+1i-1;b7=Bj+1i;g7=Gj+1i;r7=Rj+1i;a7=Aj+1i;b8=Bj+1i+1;g8=Gj+1i+1;r8=Rj+1i+1;a8=Aj+1i+1;else ;/void CMFC_HIST2View:OnDh1() /平滑算法1/ TODO: Add your command handler code hereint x=x1,y=y1,j,i,rx1,rx2,rx3,rx4;int m9=1,1,1, 1,1,1, 1,1,1;/模板系数/ UCHAR *n=(UCHAR *)MDBUF;for (j=0;jy1;j+)for (i=0;ix1;i+)/ BGRABji=n0;Gji=n1;Rji=n2;Aji=n3;n+=4;/UCHAR *c=(UCHAR *)MDBUF; for(j=0;jy;j+)for(i=0;iwrite_video(400,0,x1,y1,MDBUF);mdr-swap();mdr-winx0=0;/void CMFC_HIST2View:OnDh2() /平滑算法2/ TODO: Add your command handler code hereint x=x1,y=y1,j,i,k,rx1=0,rx2=0,rx3=0,rx4=0; int m9=1,1,1, 1,2,1, 1,1,1;/模板系数/UCHAR *n=(UCHAR *)MDBUF;for (j=0;jy1;j+)for (i=0;ix1;i+)/ BGRABji=(int)n0;Gji=(int)n1;Rji=(int)n2;Aji=(int)n3;n+=4;/UCHAR *c=(UCHAR *)MDBUF; for(j=0;jy;j+)for(i=0;ix;i+)GetXS(j,i); for (k=0;k255)c0=255;else if(rx1255)c1=255;else if(rx2255)c2=255;else if(rx3255)c3=255;else if(rx4write_video(400,0,x1,y1,MDBUF);mdr-swap(); mdr-winx0=0;/void CMFC_HIST2View:OnDh3() /平滑算法3/ TODO: Add your command handler code hereint x=x1,y=y1,j,i,k,rx1=0,rx2=0,rx3=0,rx4=0;int m9=1,2,1, 2,4,2, 1,2,1;/模板系数/UCHAR *n=(UCHAR *)MDBUF;for (j=0;jy1;j+)for (i=0;ix1;i+)/ BGRABji=(int)n0;G ji=(int)n1;Rji=(int)n2;Aji=(int)n3;n+=4;/UCHAR *c=(UCHAR *)MDBUF; for(j=0;jy;j+)for(i=0;ix;i+)GetXS(j,i); for (k=0;k255)c0=255;else if(rx1255)c1=255;else if(rx2255)c2=255;else if(rx3255)c3=255;else if(rx4write_video(400,0,x1,y1,MDBUF);mdr-swap(); mdr-winx0=0;/void CMFC_HIST2View:OnRh1() /锐化算法1/ TODO: Add your command handler code hereint x=x1,y=y1,j,i,k,rx1=0,rx2=0,rx3=0,rx4=0; int m9=-1,-1,-1, -1,9,-1, -1,-1,-1;/模板系数/UCHAR *n=(UCHAR *)MDBUF;for (j=0;jy1;j+)for (i=0;ix1;i+)/ BGRABji=(int)n0;Gji=(int)n1;Rji=(int)n2;Aji=(int)n3;n+=4;/UCHAR *c=(UCHAR *)MDBUF; for(j=0;jy;j+)for(i=0;i255)c0=255;else if(rx1255)c1=255;else if(rx2255)c2=255;else if(rx3255)c3=255;else if(rx4write_video(400,0,x1,y1,MDBUF);mdr-swap(); mdr-winx0=0;/void CMFC_HIST2View:OnRh2()/锐化算法2 / TODO: Add your command handler code hereint x=x1,y=y1,j,i,k,rx1=0,rx2=0,rx3=0,rx4=0; int m9=0,-1,0, -1,5,-1, 0,-1,0;/模板系数/UCHAR *n=(UCHAR *)MDBUF;for (j=0;jy1;j+)for (i=0;ix1;i+)/ BGRABji=(int)n0;Gji=(int)n1;Rji=(int)n2;Aji=(int)n3;n+=4;/UCHAR *c=(UCH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论