您的当前位置:首页正文

VC数字图像处理编程 (2)

2024-05-17 来源:个人技术集锦
VC数字图像处理编程 图--是物体透射光或反射光的分布,像--是人的视觉系统对图的接收在大脑中形成的印象或认识。 图像处理--就是对图像信息进行加工处理,以满足人的视觉心理和实际应用的需要。简单的说,依靠计算机对图像进行各种

目的处理,处理过程中输入的是质量差的图像,输出的是质量好的图像,常用的方法有图像增强、复原等。

随着计算机技术的发展,有一类图像处理是以计算机为对象,处理目的是是计算机能够自动识别目标,这成为图像的识别。 VC数字图像处理编程主要包括: 1、图像的文件格式; 要用计算机对数字化图像进行处理,首先要对图像文件格式要有清除的认识,因为自然界的图像都是以模拟信号的形式存在,因此

在进行处理前首先要数字化,比如摄像头(CCD)摄取的信号送到计算机之前,一般要进行数模转换,一般有图像采集卡完成,它输出的为裸图

;如果要生成目标图像文件,必须根据文件格式作相应的处理。所以要对图像的格式有清楚地认识。 在研究图像格式之前,要了解有图像的分类,除了最简单的图像外,所有图像都是有颜色的,而单色图像则是带有颜色的图像中比较简单的格式,

它一般由黑色区域和白色区域组成,可以用一个比特表示像素,”1“表示黑色,”0“表示白色,当然也可以倒过来表示,这种图像称之为二值图像。 也可以用8个比特(一个字节)表示像素,相当于把黑和白分成256个等级,”0“表示黑色,”255“表示白色,该字节的数值表示相应像素值或亮度值,

数值越接近”0“,对应像素点越黑,相反越白,这种图像叫灰度图像。单色图像黑灰度图像又称为黑白图像。

与黑白图像对应的是彩色图像,这种图像比较复杂,表示时常用彩色模式即RGB模式、CMYK模式和HIS模式,一般我们只用RGB模式,R对应红色、

G对应绿色、B对应蓝色,他们统称3基色。这三种颜色的不同搭配就构成了现实中的彩色,此时彩色图像的每一个像素都需要3个样本组成的一组数表示,其中每个 样本用于表示该像素的一个基本颜色。 对于现存的图像格式,主要讲BMP文件格式并且图像里的数据是为压缩的,因为图像的数字化处理主要是对图像中的各个像素点尽享相应的处理,而未压缩的BMP

图像中的像素数值正好与实际要处理的数字图像相对应,这种格式文件最适合我们对之进行数字化处理。注意:压缩过的图像是不能直接进行数字化的,如JPEG、GIF等

格式文件,此时首先要对图像进行解压缩,这就涉及比较复杂的解压缩算法。***? BMP文件结构 1>BMP文件组成 BMP文件主要由文件头、位图信息、颜色信息和图形数据4部分组成。 文件头包括:文件的大小、文件类型、图像数据偏离文件头的长度等信息; 位图信息包含:图像尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用到的颜色数信息; 颜色信息包括:图像所用到的颜色表,显示图像时需要用这几个颜色表来生成调色板,但如果图像是真彩色,即图像是用24个比特来表示, 文件中就没有这个信息,也就不需要操作调色板。 文件中的数据块表示图像的相应的像素值,需要注意的是:图像的像素值在文件中存放的顺序是从左到右,从下到上,

也就是说,在BMP文件中首先存放的是图像的最后一行像素,最后一行像素才是图像的地一行像素,但对与同一行的像素,则按照现左边后右边的方向存储的; 另外文件存储图像的每一行像素值时,如果存储该行像素所占字节数为4的倍数,则正常存储,否则需要后端补零,凑足4的倍数。 2>BMP文件头 BMP文件头数据结构含有BMP文件的类型、文件大小和位图其实位置等信息。 其结构定义如下:

typedef struct tagBITMAPFILEHEADER {

WORD bftype; //位图文件类型,必须为”BM“ DWORD bfSize; //位图文件的类型,以字节为单位 WORD bfReserved1; //位图文件保留字,必须为0 WORD bfReserved2; //位图文件保留字,必须为0

DWORD bf0ffBits; //位图数据的起始位置,以相对于位图头文件的偏移量表示,以字节为单位 } BITMAPFILEHEADER;该结构站14个字节 3>位图信息头

BMP位图信息头数据用于说明位图的尺寸信息等,其结构如下: typedef struct tagBITMAPINFOHEADER { DWORD biSIZE; //本结构所占的字节数 LONG biWidth; //位图宽度,以像素为单位 LONG biHeight; //位图高度,以像素为单位 WORD biPlanes; //目标设备的平面数不清,必须为1 WORD biBitCount; //每个像素所需的位数,必须为1(双色)、4(16色)、8(256色)或24(真彩色) DWORD biCompression; //位图压缩类型,必须是0(不压缩)、1(BI_RLE8压缩类型)、或2(BI_RLE4类型)之一 DWORD biSizeImage; //位图大小,以字节为单位 LONG biXPelsPerMeter; //位图水平分辨率,每米像素数 LONG biYPelsPerMeter; //位图垂直分辨率,每米像素数 DWORD biClrUsed; //位图实际使用颜色表中的颜色数 DWORD biClrImportant; //位图显示过程中重要的颜色数 }BITMAPINFOHEADER; //该结构占据40个字节。

***对于BMP文件格式,在处理单色和真彩色图像时,无论图像数据多么庞大,都不对图像数据进行任何压缩处理,一般,如果位图采用压缩格式,

那么16色图像采用RLE4压缩算发,256色图像采用RLE8压缩算法。******************** 4>颜色表

颜色表用于说明位图中的颜色,他有若干个表项,每个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:

typedef struct tagBITMAPINFO

{

BITMAPINFOHEADER bmiHeader; //位图信息头 RGBQUAD bmiColors[1]; //颜色表 } BITMAPINF0;

注意:RGBQUAD数据结构中,增加了一个保留字段rgbReserved,它不代表任何颜色,必须取固定值为“0”,同时,RGBQUAD结构中定义的颜色值中,红色、绿色和蓝色的排列顺序与一

般真彩色图像文件的颜色数据排列顺序恰好相反,即:若某个位图中的一个像素点的颜色的描述为“00(蓝),00(绿),ff(红),00”,则表示该点为红色,而不是蓝色。 5>位图数据

位图数据记录了位图的每个像素值或对应像素的颜色表的索引值,图像记录顺序是在扫描行内是从左到右,扫描行之间是从上到下。这种格式我们又称为Bottom_Up位图,当然与之相对的还有Up_Down形式的位图,他的记录顺序是从上到下的,对于这种形式的位图,也不存在压缩形式。位图的一个像素值所占的字节数:当biBitCount=1时,8个像素占一个字节;当biBitCount=4时,2个像素占一个字节;当biBitCount=4时,2个像素占一个字节;当biBitCount=8时,1个像素占1个字节;当biBitCount=24时,1个像素占3个字节,此时为真彩色图像。当图像不是真彩色时,图像文件中包含颜色表,位图的数据表示对应的像素点在颜色中相应的索引值;当图像为真彩色时,每一个像素用三个字节表示图像相应像素点色彩值,每个字节分别对应R、G、B分量的值,这时图像文件中没有颜色表。

Windows规定图像文件中一个扫描行所占的字节数必须是4的倍数(即:以字节为单位),不足的以0充实,图像中一个扫描行所占的字节数计算方法:

DataSizePerLine=(biWidth*biBitCount+31)/8;//扫描行所占的字节数 位图数据的大小按以下公式计算: DataSize=DataSizePerLine*biHeight.

上述是BMP文件格式的说明,高清以上结构,就可以正确的操作图像文件,对它进行读和写操作。

GIF图像文件格式

GIF图像格式文件全程为Graphics Interchange Format,从名字上可以看出这种图像主要是为了通过网络传输图像而设计的。GIF文件不支持24位真彩色图像,最多只能存储256色图像或灰度图像;GIF格式文件的各种数据区域一般没有固定的数据长度和存储顺序,所以为了方便程序寻找数据区,将数据区的第一个字节作为标识符;最后还要注意GIF文件存储的图像数据是有二重排列顺序:顺序排列或交叉排列。交叉排列方式适合网络传输,这样一来允许用户在不完全掌握图像数据之前,获取当前图像的数据轮廓数据。

GIF文件格式分为87和89两个版本,对于87这个版本,文件主要由5部分组成,它们按顺序出现的:文件头块、逻辑屏幕描述块、可选择的调色板块、图像数据块、最后是标志文件结束的尾块,该块总取固定的值3BH。其中第一和第二两个块用GIF文件头结构描述:

GIFHEADER: {

DB Signature; //该字段占6个字节,为了用于指明图像为GIF格式,前三个字符必须为“GIF”,后三个字符用于指定是哪个版本,87或89。

DW ScreenWidth; //

DW ScreenWidth; //占两个字节,以像素为单位表示图像的宽和高 DB GlobalFlagByte;//该字节的各个位用于调色板描述 DB BackGroundColor;//代表图像背景颜色的索引 DB AspectRatio; //图像的长度比 }

GIF格式中的调色板有通用调色板和局部调色板之分,因为GIF格式允许一个文件存储多个图像,因此有这两种调色板,其中通用调色板适于文件中所有图像,而局部调色板只是用于某一个图像。格式中的数据区域一般分为4个部分,图像数据识别区域,局部调色板数据,采用压缩算法得到的图像数据区域和结束标志区域。

在GIF89中,它包含7个部分,分别是头文件、通用调色板数据、图像数据区和四个补充数据区,他们主要是提示程序如何处理图像的。 JEPG图像文件

JEPG简称为:联合摄影专家小组,作为一种技术,主要用于数字化的图像标准编码,JPEG主要采用有损的压缩编码方式,他比GIF、BMP图像文件要复杂的多,当然我们可以通过一些

别的方法将该格式转化为BMP格式。在对JEPG文件编码时,通常需要以下四步:颜色转换、DCT变换、量化、编码。

BMP图像的基本操作

BMP图像的基本操作主要包括对BMP文件的读、写和显示等 在实现数字图像处理的过程中,主要通过对图像的每一个像素点运用各种图像处理算法来达到预期的效果,所以第一步我们最关心的问题,是如何得到每一个像素点的亮度值:为了观察和验证处理的图像效果,另一个需要解决的问题是如何将处理前后的图像正确的显示出来。

目前图像处理技术的一个突出的矛盾是图像的格式越来越多,一般情况下为了处理简便,进行图像处理所采用的都是BMP格式的图像文件(有时也用DIB格式文件),并且这种格式文件是没有压缩的。我们操作这种格式的文件,可以获取正确显示图像所需的调色板信息,图像的尺寸信息,图像中各个像素点的亮度信息等等,有了这些信息我们可以对图像施加各种处理算法,进行相应的处理。特殊情况下对于GIF、JEMP等格式的图像文件,可以首先将该格式文件装换为BMP格式,然后再进行处理。

BMP格式文件又可以分为许多种,如真彩色位图、256色位图,采用RLE(游程编码)压缩格式的位图等等。由于在实际中和图像算法效果验证中经常要处理256级并且没有压缩的BMP灰度图像,如通过黑白采集卡采集得到的图像就是这种格式,所以主要讲BMP灰度图像。

BMP灰度图像作为Windows环境下主要的图像格式之一,其格式简单,适应性强而别wish偶欢迎。这种文件格式就是每个像素用8bit表示,显示出来的图像是黑白效果,最黑的像素的灰度(也叫做亮度)值为“0”,最白的像素的灰度为“255”整个图像的灰度随机的分布在“0”~“255”的区间中,越黑的像素,其灰度值越接近于“0”,越白(越亮)的像素,其灰度值越接近“255”;于此对应的是在该文件类型中的颜色表项的各个RGB分量值相等的,并且颜色表项的各个RGB分量值是相等的,并且颜色表项的数目是256个

在进行图像处理时,操作图像中的像素值也就要得到图像的阵列;经过处理后的图像的像素值需要存储起来;显示图像时要正确实现调色板、得到位图的尺寸信息等。一下是操作灰度BMP图像时部分函数实现代码及注释。

一、BMP位图操作

BMP位图包括位图头文件结构BITMAPFILEHESDER、位图信息头结构BITMAPINFOHEADER、位图颜色表RGBQUAD和位图像素数据四部分。处理位图时需要根据文件的这些结构得到位图文件大小、位图的宽、高、实现调色板、得到位图像素值等等这里注意:位图的每行像素值要填充到一个四字节边界,即位图所占的存储长度为四字节的倍数,不足时将多余的位位用0填充。

2、图像编程的基础--操作调色板;

3、图像数据的读取、存储和显示、如何获得图像的尺寸等; 4、利用图像来美化界面;

5、图像的基本操作:图像的移动、图像的旋转、图像的镜像、图像的缩放、图像的剪切板操作; 6、图像显示的各种特技效果;

7、图像的基本处理:图像的二值化、图像的亮度和对比度的调整、图像的边缘增强、如何得到图像的直方图、图像直方图的修正、 图像的平滑、图像的锐化等、图像的伪色彩、彩色图像转化为黑白图像、物体边缘的搜索等等;

8、二值化图像的处理:腐蚀、膨胀、细化、距离变换等; 9、图像分析:直线、圆、特定物体的识别; 10、JEPG、GIF、PCX等格式文件的转换;

11、图像常用的变化:傅立叶变换、DCT变换、沃尔什变换等; 13、AVI视频流的操作;

因篇幅问题不能全部显示,请点此查看更多更全内容

Top