您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 造纸印刷 > VC数字图像处理编程入门
VC数字图像处理编程入门山东大学信息科学与工程学院2005.9.28VC开发环境简介•VC编程需要的知识C/C++语言;对Windows操作系统的了解(底层编程);微软类库MFC(MicrosoftFoundationClass)•VisualC++是一个可视化集成开发环境•掌握‘工程’的概念•菜单使用介绍、Debug/Release区别等等VC开发的两种方式(一)•SDK(softwaredevelopmentkit)方式又称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!Windows位图结构位图文件头的结构•第一部分为位图文件头BITMAPFILEHEADER,是一个结构,其定义如下:typedefstructtagBITMAPFILEHEADER{WORDbfType;DWORDbfSize;指定文件大小(包括这14个字节)WORDbfReserved1;WORDbfReserved2;DWORDbfOffBits;(从文件头到数据区的偏移量)}BITMAPFILEHEADER;这个结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数)位图信息头的结构•第二部分为位图信息头BITMAPINFOHEADER,其主要字段如下:typedefstructtagBITMAPINFOHEADER{DWORDbiSize;指定这个结构的长度,为40LONGbiWidth;指定图象的宽度,单位是象素LONGbiHeight;WORDbiBitCount;颜色的位数,一般为1、4、8、24DWORDbiSizeImage;}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个字节.•typedefstructtagRGBQUAD{BYTErgbBlue;//蓝色分量BYTErgbGreen;//绿色分量BYTErgbRed;//红色分量BYTErgbReserved;//保留值}RGBQUAD;注意:24位真彩色图中没有调色板数据实际的位图数据区•第四部分就是实际的图象数据了。•对于用到调色板的位图,图象数据就是该像素颜在调色板中的索引值•对于真彩色图,图象数据就是实际的R,G,B值。下面就2色,16色,256色位图和真彩色位图分别介绍。对于2色位图,用1位就可以表示该像素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个像素。对于16色位图,用4位可以表示一个像素的颜色,所以一个字节可以表示2个像素。对于256色位图,一个字节刚好可以表示1个像素。对于真彩色图,三个字节才能表示1个像素。•BMP文件的数据从下到上,从左到右的。VC练习三•通过刚才建立的框架,逐步添加函数,形成一个ImageDemo程序-图像读取、显示、像素操作程序,加深对前述DIB图像结构的理解•学习TRACE等调试技巧•其间学习菜单的创建、工具栏的使用•学习输出对话框的使用•学习输入对话框、文本编辑框的使用作业•作业:(一)自己动手建立一个图像编程框架(二)细菌分割、标号、面积统计程序•作业将在两周后的课上讲参考书目•《VisualC++/MATLAB图像处理与识别实用案例精选》.胡小锋,赵辉编著.北京:人民邮电出版社2004年9月出版.•《VisualC++系统开发实例精粹》.赵辉,叶子青编著.北京:人民邮电出版社2005年8月出版.
本文标题:VC数字图像处理编程入门
链接地址:https://www.777doc.com/doc-3378058 .html