《数字图像处理》实验指导书.docx
- 文档编号:2917273
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:57
- 大小:92.36KB
《数字图像处理》实验指导书.docx
《《数字图像处理》实验指导书.docx》由会员分享,可在线阅读,更多相关《《数字图像处理》实验指导书.docx(57页珍藏版)》请在冰豆网上搜索。
《数字图像处理》实验指导书
《数字图像处理》
实验指导书
编写:
罗建军
海南大学三亚学院
2009年4月
一、概述
实验项目:
图像处理程序编程
运行环境:
WindowsXP/2000
编程工具:
VisualC++6.0
主要内容:
(1)建立程序框架,实现图像的读取、保存、显示;
(2)编写颜色处理、几何变换、平滑锐化等图像处理代码,并实现其调用;
(3)自行编写实现扩展的图像处理功能。
二、建立程序框架
1.新建应用程序
运行VisualC++6.0;
点击菜单“文件——新建”,打开“新建”对话框;
点击“工程”选项页;选中“MFCAppWizard(exe)”;在“位置”编辑框中确定适当的存储路径;在“工程名称”编辑框中输入DIP?
?
?
,其中?
?
?
为自己姓名的拼音缩写,如DIPLJJ;按“确定”按钮,进入向导过程。
2.应用程序向导
步骤1:
选择“单文档”,其它不变,
步骤2:
不作改变,点击“下一步”;
步骤3:
不作改变,
步骤4:
取消“打印和打印预览”;按下“高级”按钮,在“文件扩展名”编辑框中输入bmp,关闭;点击“下一步”;
步骤5:
选择“作为静态的DLL”,点击“下一步”;
步骤6:
将CDIPLJJView类的基类选择为CScrollView,其它不变,点击“完成”。
(其中LJJ应换为自己姓名的拼音缩写,后同)
点击“确定”。
3.应用程序框架及基本操作
在完成向导过程后,将建立一套应用程序框架,该框架中包含如下几个类:
CDIPLJJApp——应用程序类
CMainFrame——主窗口框架类
CDIPLJJDoc——文档类
CDIPLJJView——视图类
CAboutDlg——关于对话框类
每个类都有一个类定义文件.h,和类实现文件.cpp。
在VC主界面左侧的组合窗口中,切换到“ClassViev”选项页,点击展开“DIPLJJClasses”,将列出该应用程序的所有类。
双击某个类,将在编辑窗口中打开该类的.h文件;点击展开类,双击类中已实现的某个成员函数,将打开该类的.cpp文件。
4.修改“关于”对话框
在VC主界面左侧的组合窗口中,切换到“ResourceView”选项页,展开“DIPLJJresources”,展开“Dialog”,双击“IDD_ABOUTBOX”,对“关于”对话框进行编辑,在“版权所有(C)2009”之前加上自己的学号和姓名,然后保存。
5.组建和运行程序
点击菜单“组建——组建”,或点击相应的工具条按钮,生成可执行程序(exe);
点击菜单“组建——执行”,或点击相应的工具条按钮,运行该程序,在程序中打开“关于”对话框。
三、建立图像类
1.建立类文件
点击菜单“插入——类”,打开“新建类”对话框;在类的类型中选中“GenericClass”;在名称中输入“LImage”;确定。
建立起LImage类的头文件LImage.h和源文件LImage.cpp。
2.编写类定义代码
打开LImage.h文件,将LImage类的定义代码添加到该头文件中(灰底部分为文件中已有的代码,后同):
classLImage
{
public:
LImage();
virtual~LImage();
BOOLCreate(inta_Width,inta_Height);
voidDestroy();
BOOLIsValid();
BOOLCopyFrom(LImage*a_pImg);
BOOLLoadBmpFile(CStringa_Filename);
BOOLSaveBitmap(CStringa_Filename);
//属性
intm_Width,m_Height;//图像的宽度,高度,以象素计
intm_WidthBytes;//每行象素所占字节数
intm_ImageSize;//象素数据总字节数
BYTE*m_pBits;//图像数据块
CDCm_DC;
//显示
BOOLBitBlt(HDCa_DestDC,inta_DestX,inta_DestY,inta_Width,inta_Height,
inta_SrcX,inta_SrcY,DWORDa_Rop=SRCCOPY);
BOOLStretchBlt(HDCa_DestDC,inta_DestX,inta_DestY,inta_DestWidth,
inta_DestHeight,inta_SrcX,inta_SrcY,inta_SrcWidth,inta_SrcHeight,
DWORDa_Rop=SRCCOPY);
intFitBlt(HDCa_DestDC,inta_DestX,inta_DestY,inta_DestWidth,inta_DestHeight,
inta_SrcX,inta_SrcY,inta_SrcWidth,inta_SrcHeight,DWORDa_Rop=SRCCOPY);
protected:
HBITMAPm_hBitmap;
HDCm_hMemDC;
private:
HBITMAPm_hOldBitmap;
};
#endif//!
defined(AFX_LIMAGE_H__4BFB411F_B5D3_4A26_8188_919613CED4A8__INCLUDED_)
3.编写类实现代码
打开LImage.cpp文件,将LImage类的实现代码添加到该文件中。
(1)构造及析构函数
LImage:
:
LImage()
{
m_hBitmap=NULL;
m_pBits=NULL;
m_hMemDC=NULL;
}
LImage:
:
~LImage()
{
Destroy();
}
(2)图像空间创建函数
按给定的图像尺寸分配图像的内存空间,并定义相关参数。
BOOLLImage:
:
Create(inta_Width,inta_Height)
{
Destroy();
if(a_Width==0||a_Height==0)returnFALSE;
if(a_Width<0)a_Width=-a_Width;
if(a_Height<0)a_Height=-a_Height;
BITMAPINFObi;
bi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth=a_Width;
bi.bmiHeader.biHeight=-a_Height;//使图像原点在左上角;若为正数则在左下角
bi.bmiHeader.biPlanes=1;
bi.bmiHeader.biBitCount=24;
bi.bmiHeader.biCompression=BI_RGB;
bi.bmiHeader.biSizeImage=0;
bi.bmiHeader.biXPelsPerMeter=11810;
bi.bmiHeader.biYPelsPerMeter=11810;
bi.bmiHeader.biClrUsed=0;
bi.bmiHeader.biClrImportant=0;
HDChdc=CreateCompatibleDC(NULL);
m_hBitmap=CreateDIBSection(hdc,&bi,DIB_RGB_COLORS,(void**)&m_pBits,NULL,0);
DeleteDC(hdc);
if(m_hBitmap==NULL||m_pBits==NULL)
{
m_hBitmap=NULL;
m_pBits=NULL;
returnFALSE;
}
BITMAPbm;
GetObject(m_hBitmap,sizeof(BITMAP),&bm);
m_Width=bm.bmWidth;
m_Height=bm.bmHeight;
m_WidthBytes=bm.bmWidthBytes;
m_ImageSize=m_WidthBytes*m_Height;
m_hMemDC=CreateCompatibleDC(NULL);
if(m_hMemDC==NULL)
{
DeleteObject(m_hBitmap);
m_hBitmap=NULL;
m_pBits=NULL;
m_hMemDC=NULL;
returnFALSE;
}
m_hOldBitmap=(HBITMAP)SelectObject(m_hMemDC,m_hBitmap);
m_DC.Attach(m_hMemDC);
returnTRUE;
}
(3)图像空间释放函数
voidLImage:
:
Destroy()
{
if(m_hBitmap!
=NULL&&m_pBits!
=NULL&&m_hMemDC!
=NULL)
{
m_DC.Detach();
SelectObject(m_hMemDC,m_hOldBitmap);
DeleteDC(m_hMemDC);
DeleteObject(m_hBitmap);
}
m_hBitmap=NULL;
m_pBits=NULL;
m_hMemDC=NULL;
}
(4)图像有效性判别及图像复制函数
BOOLLImage:
:
IsValid()
{
return(m_hBitmap!
=NULL&&m_pBits!
=NULL&&m_hMemDC!
=NULL);
}
BOOLLImage:
:
CopyFrom(LImage*a_pImg)
{
if(a_pImg==NULL||!
a_pImg->IsValid())
returnFALSE;
if(!
Create(a_pImg->m_Width,a_pImg->m_Height))
returnFALSE;
memcpy((void*)m_pBits,(void*)a_pImg->m_pBits,m_WidthBytes*m_Height);
returnTRUE;
}
(5)图像显示函数
直接显示,缩放显示,按适合窗口的尺寸显示图像。
BOOLLImage:
:
BitBlt(HDCa_DestDC,inta_DestX,inta_DestY,inta_Width,inta_Height,
inta_SrcX,inta_SrcY,DWORDa_Rop)
{
return:
:
BitBlt(a_DestDC,a_DestX,a_DestY,a_Width,a_Height,
m_hMemDC,a_SrcX,a_SrcY,a_Rop);
}
BOOLLImage:
:
StretchBlt(HDCa_DestDC,inta_DestX,inta_DestY,inta_DestWidth,
inta_DestHeight,inta_SrcX,i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像处理 数字图像 处理 实验 指导书