1 / 16

VC 数字图像处理编程入门

VC 数字图像处理编程入门. 山东大学信息科学与工程学院 2005.9.28. VC 开发环境简介. VC 编程需要的知识 C/C++ 语言; 对 Windows 操作系统的了解 ( 底层编程 ) ; 微软类库 MFC(Microsoft Foundation Class) Visual C++ 是一个可视化集成开发环境 掌握‘工程’的概念 菜单使用介绍、 Debug/Release 区别等等. VC 开发的两种方式(一).

Download Presentation

VC 数字图像处理编程入门

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VC数字图像处理编程入门 山东大学信息科学与工程学院2005.9.28

  2. VC开发环境简介 • VC编程需要的知识C/C++语言;对Windows操作系统的了解(底层编程);微软类库MFC(Microsoft Foundation Class) • Visual C++是一个可视化集成开发环境 • 掌握‘工程’的概念 • 菜单使用介绍、Debug/Release区别等等

  3. VC开发的两种方式(一) • SDK(software development kit)方式又称WIN32API(应用程序接口)编程即直接调用32位Windows(WIN32)操作系统提供的接口函数进行编程。 • SDK编程(VC中)使用的语言是C语言。 • 适合底层编程和对速度要求较高的环境,比如游戏开发、驱动开发、数字图形等 • 看图像打开、高斯噪声绘制的例子

  4. VC开发的两种方式(二) • MFC方式又称类库编程,即程序主要不再直接跟操作系统API打交道(在需要的时候也可以调用API),而是使用封装好的C++类库。 • MFC编程的好处之一:可以使用MFC向导来生成程序框架,提高效率 • 在这堂课中后面讲的程序都是MFC程序

  5. VC练习一 • TC编写的‘hello,world’程序在VC中编译的方法 • 初步确立‘工程’的概念双击打开C源程序形成工程的方法;先建立工程,再逐步添加C源程序的方法 • 初步讲解VC调试技术(步进/变量监视) • 注意在这个程序中C和C++的部分区别

  6. VC练习二 • 学习使用VC中的程序建立向导来建立一个程序框架 • 学习建立一个菜单、工具栏并弹出对话框显示Hello,World!

  7. 图像编程基础 • 位图、三基色与混色、调色板的概念 • 有一个长宽各为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!

  8. Windows位图结构

  9. 位图文件头的结构 • 第一部分为位图文件头BITMAPFILEHEADER,是一个结构,其定义如下: typedef struct tagBITMAPFILEHEADER{ WORD bfType; DWORD bfSize;指定文件大小(包括这14个字节) WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits;(从文件头到数据区的偏移量) } BITMAPFILEHEADER; 这个结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数)

  10. 位图信息头的结构 • 第二部分为位图信息头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位整数)

  11. biSizeImage字段 • biSizeImage 指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来: biSizeImage=biWidth‘ *biHeight 要注意的是:上述公式中的biWidth‘必须是4的整倍数(所以不是biWidth,而是biWidth‘ ,表示大于或等于biWidth的,离4最近的整倍数。举个例子,如果biWidth=240,则biWidth‘ =240;如果biWidth=241,biWidth‘ =244) 一定要注意:每行所占字节长度始终是4的倍数,或者每行所占位长度是32的倍数。如果不是,则需要补齐

  12. 调色板 • 调色板实际上是一个四元数组,则有2的iBitCount次方个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节. • typedef struct tagRGBQUAD{ BYTE rgbBlue; //蓝色分量 BYTE rgbGreen; //绿色分量 BYTE rgbRed; //红色分量 BYTE rgbReserved; //保留值 } RGBQUAD;注意:24位真彩色图中没有调色板数据

  13. 实际的位图数据区 • 第四部分就是实际的图象数据了。 • 对于用到调色板的位图,图象数据就是该像素颜在调色板中的索引值 • 对于真彩色图,图象数据就是实际的R,G,B值。下面就2色,16色,256色位图和真彩色位图分别介绍。 对于2色位图,用1位就可以表示该像素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个像素。 对于16色位图,用4位可以表示一个像素的颜色,所以一个字节可以表示2个像素。 对于256色位图,一个字节刚好可以表示1个像素。 对于真彩色图,三个字节才能表示1个像素。 • BMP文件的数据从下到上,从左到右的。

  14. VC练习三 • 通过刚才建立的框架,逐步添加函数,形成一个ImageDemo程序-图像读取、显示、像素操作程序,加深对前述DIB图像结构的理解 • 学习TRACE等调试技巧 • 其间学习菜单的创建、工具栏的使用 • 学习输出对话框的使用 • 学习输入对话框、文本编辑框的使用

  15. 作业 • 作业:(一)自己动手建立一个图像编程框架(二)细菌分割、标号、面积统计程序 • 作业将在两周后的课上讲

  16. 参考书目 • 《Visual C++/MATLAB图像处理与识别实用案例精选》.胡小锋,赵辉 编著.北京:人民邮电出版社2004年9月出版. • 《Visual C++系统开发实例精粹》.赵辉,叶子青 编著.北京:人民邮电出版社2005年8月出版.

More Related