《数字图像处理实验(1).ppt》由会员分享,可在线阅读,更多相关《数字图像处理实验(1).ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数字图像处理数字图像处理课程实验课程实验共8学时使用平台:vc6.0三个实验:三个实验:lVC图像编程基础图像编程基础 了解位图格式 掌握CDIB类的使用 学会新建工程 学会添加菜单项和响应函数 掌握位图的打开和显示l一个简单的图像处理工程实例一个简单的图像处理工程实例 功能函数的编程实现 掌握图像的点运算编程 了解二值化和底片化的原理 l图像的空间域平滑和锐化图像的空间域平滑和锐化 掌握空间域平滑锐化的基本原理 编写实现空间域平滑锐化功能的代码一、一、VC图像处理基础图像处理基础l重点重点:位图的读取和显示l难点难点:VC开发环境、类的使用l必备知识:必备知识:熟悉VC基本环境(如会建立一个
2、工程、会使用一个现成的类)主要内容主要内容lBmp位图图像格式lCDIB类的介绍lVc的基本知识l建立一个新工程l利用CDIB类打开、显示图像位图图像格式位图图像格式 BMP文件由文件头、位文件头、位图信息头、颜色信息和图信息头、颜色信息和图像数据图像数据四部分组成。文件头文件头位图信息位图信息(信息头颜色信息表)(信息头颜色信息表)图像数据图像数据位图图像格式文件头位图图像格式文件头BMP文件头数据结构含有文件头数据结构含有BMP文件的类型、文件大文件的类型、文件大小小和和位图起始位置等信息。位图起始位置等信息。其结构定义如下:typedef struct tagBITMAPFILEHEAD
3、ER WORD bfType;/位图文件的类型,必须为BM DWORD bfSize;/位图文件的大小,以字节为单位 WORD bfReserved1;/位图文件保留字,必须为0 WORD bfReserved2;/位图文件保留字,必须为0 DWORD bfOffBits;/位图数据的起始位置,以相对于位图 /文件头的偏移量表示,以字节为单位 BITMAPFILEHEADER;位图图像格式位图信息头位图图像格式位图信息头lBMP位图信息头数据用于说明位图的尺寸等信息。ltypedef struct tagBITMAPINFOHEADERDWORD biSize;/本结构所占用字节数LONG b
4、iWidth;/位图的宽度,以像素为单位LONG biHeight;/位图的高度,以像素为单位WORD biPlanes;/目标设备的级别,必须为1WORD biBitCount/每个像素所需的位数,必须是1(双色),/4(16色),8(256色)或24(真彩色)之一DWORD biCompression;/位图压缩类型,必须是 0(不压缩),/1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一DWORD biSizeImage;/位图的大小,以字节为单位LONG biXPelsPerMeter;/位图水平分辨率,每米像素数LONG biYPelsPerMeter;/位图垂直分辨率
5、,每米像素数DWORD biClrUsed;/位图实际使用的颜色表中的颜色数DWORD biClrImportant;/位图显示过程中重要的颜色数 BITMAPINFOHEADER;位图图像格式颜色信息表位图图像格式颜色信息表l颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:typedef struct tagRGBQUAD BYTErgbBlue;/蓝色的亮度(值范围为0-255)BYTErgbGreen;/绿色的亮度(值范围为0-255)BYTErgbRed;/红色的亮度(值范围为0-255)BYTErgbR
6、eserved;/保留,必须为0 RGBQUAD;l 位图图像格式颜色信息表位图图像格式颜色信息表l颜色表中RGBQUAD结构数据的个数有biBitCount来确定:biBitCount=1,4,8时,分别有2,16,256个表项;当biBitCount=16,24,32时,没有颜色表项。l位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:typedef struct tagBITMAPINFO BITMAPINFOHEADER bmiHeader;/位图信息头 RGBQUAD bmiColors1;/颜色表 BITMAPINFO;位图图像格式象素数据位图图像格式象素数据l位图
7、数据位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:当biBitCount=1时,8个像素占1个字节;当biBitCount=4时,2个像素占1个字节;当biBitCount=8时,1个像素占1个字节;当biBitCount=16时,1个像素占2个字节(RGB555格式);当biBitCount=24时,1个像素占3个字节(BGR格式);当biBitCount=32时,1个像素占4个字节(BGR-格式,-表示不处理的字节)位图图像格式象素数据位图图像格式象素数据lWindows规定一个扫描行所占的字节数必须是4的倍数
8、(即以long为单位),不足的以0填充,一个扫描行所占的字节数计算方法:DataSizePerLine=(biWidth*biBitCount+31)/8;/一个扫描行所占的字节数DataSizePerLine=DataSizePerLine/4*4;/字节数必须是4的倍数位图数据的大小(不压缩情况下):DataSize=DataSizePerLine*biHeight;CDIB类介绍类介绍 该类将位图文件的读取、象素数据的获取及显示进行了封装。具体的代码见附带的电子参考资料。下面介绍具体的成员和方法:CDIB类介绍类介绍 1、bool CDIB:LoadFromFile(LPCTSTR lp
9、szFileName)功能:功能:用于加载位图。参数参数:lpszFileName表示加载的位图路径和名称。如:d:test123.bmp 返回值:返回值:成功读取后,返回true,否则为false 注意:注意:但调用该函数成功加载位图后,CDIB类的成员变量m_bLoaded将变为true,否则为false,因此,可以通过m_bLoaded来进行判断是否加载了位图。CDIB类介绍类介绍 2、int GetDIBWidth()功能:功能:获取位图的宽度返回值:返回值:位图的宽度注意:注意:该函数只有在加载位图后才能调用,否则会出错(可通过m_bLoaded来判断)。3、int GetDIBHe
10、ight()功能:功能:获取位图的高度返回值:返回值:位图的高度注意:注意:该函数只有在加载位图后才能调用,否则会出错(可通过m_bLoaded来判断)。CDIB类介绍类介绍 4、void CDIB:ShowDIB(CDC*pDC,int nLeft,int nTop,int nRight,int nBottom,BYTE*pDIBData,BITMAPINFO*pBMI)功能:功能:显示位图参数:参数:pDC /DC的句柄nLeft,/目标矩形左上角的X坐标nTop,/目标矩形左上角的Y坐标nRight,/目标矩形的宽度nBottom,/目标矩形的高度0,/源矩形左上角的X坐标0,/源矩形左
11、上角的Y坐标GetDIBWidth(),/源矩形的宽度GetDIBHeight(),/源矩形的高度pDIBData,/位图图象数据的地址 pBMI,/位图信息结构地址CDIB类介绍类介绍 5 5、InvalidateDataInvalidateData()()功能:将功能:将m_pdatam_pdata 的信息赋值给的信息赋值给m_pDIBDatam_pDIBData,便于显示,便于显示m_pdatam_pdata的信的信息。息。6 6、几个重要的成员变量、几个重要的成员变量BYTE*BYTE*m_pdatam_pdata;/;/位图的灰度信息位图的灰度信息boolbool m_bLoaded
12、m_bLoaded;/;/表示是否加载了位图表示是否加载了位图BITMAPINFO*BITMAPINFO*m_pBMIm_pBMI;/;/位图信息头位图信息头BYTE*BYTE*m_pDIBDatam_pDIBData;/;/位图象素数据指针位图象素数据指针BYTE*BYTE*m_pDumpDIBDatam_pDumpDIBData;/;/位图象素数据指针位图象素数据指针BITMAPFILEHEADER BITMAPFILEHEADER bfhbfh;/;/位图信息头位图信息头BITMAPINFOHEADER BITMAPINFOHEADER bihbih;/;/位图文件头位图文件头CDIB类
13、介绍类介绍 文件头信息头01234567891011.m_pdata与m_pDIBData的关系01234567891011.m_pdatam_DIBData8位图中两者的关系CDIB类介绍类介绍 文件头信息头0-b0-g0-r1-b1-g1-r2-b2-g2-r3-b3-g3-r.0123.m_pdatam_DIBData24位图中两者的关系m_pdata与m_pDIBData的关系CDIB类介绍类介绍 注意:注意:m_pdata与m_pDIBData的关系如果是8位图,m_pdata与m_pDIBData两个指针指向的数据块内容是相等的,即:m_pdatak=m_pDIBDatak如果是2
14、4位图,m_pdata与m_pDIBData两个指针指向的数据块内容是不相等的,m_pDIBData代表的是象素的RGB格式,而m_pdata表示的是象素的灰度信息。m_pdata与m_pDIBData的关系CDIB类介绍类介绍 当为当为2424位图时,显示时采用位图时,显示时采用m_pDIBDatam_pDIBData数据,数据,为简单起见,我们可以仅仅对灰度信息进行处为简单起见,我们可以仅仅对灰度信息进行处理,因为在灰度信息理,因为在灰度信息m_pdatam_pdata数据中,一个象素数据中,一个象素对应于一个字节,而彩色信息对应于一个字节,而彩色信息m_pDIBDatam_pDIBDat
15、a数据数据中,一个象素对于于三个字节。如果对中,一个象素对于于三个字节。如果对m_pdatam_pdata进行处理后,我们可以通过调用进行处理后,我们可以通过调用InvalidateDataInvalidateData()()函数来将函数来将m_pdatam_pdata的数据赋值给的数据赋值给m_pDIBDatam_pDIBData,从而显示处理结果。从而显示处理结果。CDIB类介绍类介绍实验中类的使用流程实验中类的使用流程 调用LoadFromFile打开图像调用GetDIBWidth()和GetDIBHeight()获取图像高和宽对m_pdata中的数据处理调用Invalidate()函数更新m_pDIBData通过m_bLoaded进行判断调用ShowDIB()显示处理结果其他操作falsetrue位图的打开与显示位图的打开与显示 新建一个工程新建一个工程添加添加CDIBCDIB类类添加菜单项添加菜单项添加响应函数添加响应函数添加打开和显示的代码添加打开和显示的代码编译调试编译调试