160 likes | 313 Views
VC 数字图像处理编程入门. 山东大学信息科学与工程学院 2005.9.28. VC 开发环境简介. VC 编程需要的知识 C/C++ 语言; 对 Windows 操作系统的了解 ( 底层编程 ) ; 微软类库 MFC(Microsoft Foundation Class) Visual C++ 是一个可视化集成开发环境 掌握‘工程’的概念 菜单使用介绍、 Debug/Release 区别等等. VC 开发的两种方式(一).
E N D
VC数字图像处理编程入门 山东大学信息科学与工程学院2005.9.28
VC开发环境简介 • VC编程需要的知识C/C++语言;对Windows操作系统的了解(底层编程);微软类库MFC(Microsoft Foundation Class) • Visual C++是一个可视化集成开发环境 • 掌握‘工程’的概念 • 菜单使用介绍、Debug/Release区别等等
VC开发的两种方式(一) • SDK(software development kit)方式又称WIN32API(应用程序接口)编程即直接调用32位Windows(WIN32)操作系统提供的接口函数进行编程。 • SDK编程(VC中)使用的语言是C语言。 • 适合底层编程和对速度要求较高的环境,比如游戏开发、驱动开发、数字图形等 • 看图像打开、高斯噪声绘制的例子
VC开发的两种方式(二) • MFC方式又称类库编程,即程序主要不再直接跟操作系统API打交道(在需要的时候也可以调用API),而是使用封装好的C++类库。 • MFC编程的好处之一:可以使用MFC向导来生成程序框架,提高效率 • 在这堂课中后面讲的程序都是MFC程序
VC练习一 • TC编写的‘hello,world’程序在VC中编译的方法 • 初步确立‘工程’的概念双击打开C源程序形成工程的方法;先建立工程,再逐步添加C源程序的方法 • 初步讲解VC调试技术(步进/变量监视) • 注意在这个程序中C和C++的部分区别
VC练习二 • 学习使用VC中的程序建立向导来建立一个程序框架 • 学习建立一个菜单、工具栏并弹出对话框显示Hello,World!
图像编程基础 • 位图、三基色与混色、调色板的概念 • 有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R,G,B三个分量表示,因为每个分量有256个级别,要用8位即一个字节来表示,所以每个象素需要用3个字节。整个图象要用200*200*3,约120k字节。 这幅图中最多只有16种颜色,我们可以用一个表:表中的每一行记录一种颜色的R,G,B值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第0行为255,0,0(红色),那么当某个象素为红色时,只需要标明0即可。 再来计算一下:16种状态可以用4位表示,所以一个象素要用半个字节。整个图象要用200*200*0.5,约20k字节,再加上表占用的字节为3*16=48字节.整个占用的字节数约为前面的1/6!
位图文件头的结构 • 第一部分为位图文件头BITMAPFILEHEADER,是一个结构,其定义如下: typedef struct tagBITMAPFILEHEADER{ WORD bfType; DWORD bfSize;指定文件大小(包括这14个字节) WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits;(从文件头到数据区的偏移量) } BITMAPFILEHEADER; 这个结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数)
位图信息头的结构 • 第二部分为位图信息头BITMAPINFOHEADER,其主要字段如下: typedef struct tagBITMAPINFOHEADER{ DWORD biSize;指定这个结构的长度,为40 LONG biWidth;指定图象的宽度,单位是象素 LONG biHeight; WORD biBitCount;颜色的位数,一般为1、4、8、24 DWORD biSizeImage; } BITMAPINFOHEADER; • 这个结构的长度是固定的,为40个字节(WORD为无符号16位整数,DWORD无符号32位整数,LONG为32位整数)
biSizeImage字段 • biSizeImage 指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来: biSizeImage=biWidth‘ *biHeight 要注意的是:上述公式中的biWidth‘必须是4的整倍数(所以不是biWidth,而是biWidth‘ ,表示大于或等于biWidth的,离4最近的整倍数。举个例子,如果biWidth=240,则biWidth‘ =240;如果biWidth=241,biWidth‘ =244) 一定要注意:每行所占字节长度始终是4的倍数,或者每行所占位长度是32的倍数。如果不是,则需要补齐
调色板 • 调色板实际上是一个四元数组,则有2的iBitCount次方个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节. • typedef struct tagRGBQUAD{ BYTE rgbBlue; //蓝色分量 BYTE rgbGreen; //绿色分量 BYTE rgbRed; //红色分量 BYTE rgbReserved; //保留值 } RGBQUAD;注意:24位真彩色图中没有调色板数据
实际的位图数据区 • 第四部分就是实际的图象数据了。 • 对于用到调色板的位图,图象数据就是该像素颜在调色板中的索引值 • 对于真彩色图,图象数据就是实际的R,G,B值。下面就2色,16色,256色位图和真彩色位图分别介绍。 对于2色位图,用1位就可以表示该像素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个像素。 对于16色位图,用4位可以表示一个像素的颜色,所以一个字节可以表示2个像素。 对于256色位图,一个字节刚好可以表示1个像素。 对于真彩色图,三个字节才能表示1个像素。 • BMP文件的数据从下到上,从左到右的。
VC练习三 • 通过刚才建立的框架,逐步添加函数,形成一个ImageDemo程序-图像读取、显示、像素操作程序,加深对前述DIB图像结构的理解 • 学习TRACE等调试技巧 • 其间学习菜单的创建、工具栏的使用 • 学习输出对话框的使用 • 学习输入对话框、文本编辑框的使用
作业 • 作业:(一)自己动手建立一个图像编程框架(二)细菌分割、标号、面积统计程序 • 作业将在两周后的课上讲
参考书目 • 《Visual C++/MATLAB图像处理与识别实用案例精选》.胡小锋,赵辉 编著.北京:人民邮电出版社2004年9月出版. • 《Visual C++系统开发实例精粹》.赵辉,叶子青 编著.北京:人民邮电出版社2005年8月出版.