资源描述:
《图像处理课程设计实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、图像处理课程设计实验报告一、实验目的:熟悉VisualC++编程环境及数字图像处理的基本方法,并运用VisualC++编写一些基本的图象处理程序,如点处理、图像增强、正交变换等几个方面。二、实验内容:各部分核心程序及其注释。读入图像:根据BMP格式的图像数据结构,文件的信息依次是图像的文件头BITMAPFILEHEADER、图像的信息头BITMAPINFOHEADER、调色板1024个字节,其后才是我们所要的图像的灰度值信息,我们就把后面的灰度值信息写入DATA数组。而后所有的图像处理的源数据都来自该数组。CFilefile;CFil
2、eExceptionfe;file.Open(lpszPathName,CFile::modeRead
3、CFile::shareDenyWrite,&fe);BITMAPFILEHEADERbmfHeader;BITMAPINFOHEADERbmiHeader;//读入图像的文件头和信息头file.Read((LPSTR)&bmfHeader,sizeof(bmfHeader));file.Read((LPSTR)&bmiHeader,sizeof(bmiHeader));//读入图像的宽和高width=bmiHeader.biWid
4、th;height=bmiHeader.biHeight;HANDLEhDIB;LPSTRlpDIB;DWORDdwSize;dwSize=file.GetLength();hDIB=(HANDLE)::GlobalAlloc(GMEM_MOVEABLE
5、GMEM_ZEROINIT,dwSize);lpDIB=(LPSTR)::GlobalLock((HGLOBAL)hDIB);//读入图像的调色板和灰度值信息file.ReadHuge(lpDIB,dwSize-sizeof(bmfHeader)-sizeof(bmiHeader))
6、;//跳过调色板部分lpDIB=lpDIB+256*4;//把图像的灰度值写入数组inti,j;for(j=height-1;j>=0;j--)for(i=0;iwidth;height=pDoc->height;for(j=0;jheight;j++)for(i=0;iwidth;i++)//由于是灰度图像所
7、以R、G、B的值一样pDC->SetPixel(i,j,RGB(Data[j*width+i],Data[j*width+i],Data[j*width+i]));显示直方图:voidCBmpView::OnViewIntensity(){CIntensityDlgdlg;inti;dlg.m_lheight=height;dlg.m_lwidth=width;for(i=0;i<256;i++)dlg.m_lCount[i]=0;//统计直方图for(i=0;i8、i]]++;dlg.DoModal();}voidCIntensityDlg::OnPaint(){CPaintDCdc(this);//devicecontextforpainting//字符串CStringstr;//循环变量longi;//最大计数longlMaxCount=0;//获取绘制坐标的文本框CWnd*pWnd=GetDlgItem(IDC_COORD);//指针CDC*pDC=pWnd->GetDC();pWnd->Invalidate();pWnd->UpdateWindow();pDC->Rectangle(0,
9、0,330,300);//绘制坐标轴pDC->MoveTo(10,10);//垂直轴第24页pDC->LineTo(10,280);//水平轴pDC->LineTo(320,280);//写X轴刻度值str.Format("0");pDC->TextOut(10,283,str);str.Format("50");pDC->TextOut(60,283,str);str.Format("100");pDC->TextOut(110,283,str);str.Format("150");pDC->TextOut(160,283,str)
10、;str.Format("200");pDC->TextOut(210,283,str);str.Format("255");pDC->TextOut(265,283,str);//绘制X轴刻度for(i=0;i<256