基于vc的图像的几何变换的实现毕业设计内容摘要:

要,因此选择合适的语言进行算法的描述显得尤为重要。 本文选择 Visual C++,其主要优势在于以下三个方面: ( 1)执行效率高。 C++的执行代码经过编译后生成的是汇编语言,它可以直接在处理器上运行,因此它的执行效率较高。 ( 2)较高的灵活度。 指针是 C++的一种特殊的数据类型,能够获取和直接操纵地址,实现动态存储分配内存。 掌握指针就能更有效地使用内存空间, C++中指 8 针的使用,很大幅度上提高了编程的灵活度。 ( 3)提高了内存使用效率。 对于图形图像数据的处理而言,大量信息的图像数据处理需要占用较大的内存,而计算机内存是有限的。 在相对有限的内存空间,必须更有效的使用才能比较好地完成数 据处理运算。 由于 C++语言支持对内存的直接分配和释放,提高了内存的使用效率,也大大提高了图像处理效率。 2 数字图像处理的简介 什么是数字图像 简单地说,数字图像就是能够在计算机上显示和处理的图像,根据其特性可以分为两大类 —— 位图和矢量图。 位图通常使用数字阵列来表示,常见格式有 BMP、JPG、 GIF 等;矢量图由矢量数据库表示。 我们接触的最多的就是 PNG 图形。 我们可以将一幅图像视为一个二维函数 f( x, y),其中 x 和 y 是空间坐标,而在 xy 平面中的任意一对空间坐标( x, y)上的幅值 f 称为该点图像的灰度 、亮度或强度。 此时,如果 f、 x、 y 均为非负有限离散,则称该图像为数字图像(位图)。 一个大小为 M N 的数字图像是由 M 行 N 列的有限元素组成的,每个元素都有特定的位置和幅值,代表了其所在行列位置上的图像物理信息,如灰度和色彩等。 这些元素称为图像元素或像素。 数字图像的显示 不论是 CRT 显示器还是 LCD 显示器,都是由许多点构成的,显示图像时这些点对应图像的像素,显示器被称为位映像设备。 所谓位映像,就是一个二维的像素矩阵,而位图则采用位映像方法显示和存储的图像。 当一幅数字图像被放大后就可以明显看出图像是由很多 方格形状的像素构成的。 数字图像的分类 根据每个像素所代表信息的不同,可将图像分为二值图像、灰度图像、 RGB 图像以及索引图像等。 ( 1)二值图像 每个像素只有黑、白两种颜色的图像称为二值图像。 在二值图像中,像素只有0和 1两种取值,一般用 0来表示黑色,用 1表示白色。 9 ( 2)灰度图像 在二值图像中进一步加入许多介于黑色和白色之间的颜色深度,就构成了 灰度图像。 这类图像通常显示为从最暗黑色到最亮的白色的灰度,每种灰度(颜色深度)成为一个灰度级,通常用 L 表示。 在灰度图像中,像素可以取 0~L— 1 之间的整数值,根 据保存灰度数值所使用的数据类型的不同,可能有 256种取值或者 k2种取值,当 k=1 时即退化为二值图像。 ( 3) RGB 图像 众所周知,自然界中几乎所有颜色都可以由红( Red, R) 、绿( Green, G) 、蓝( Blue, B) 3 种颜色组合而成,通常称它们为 RGB 三原色。 计算机显示彩色图像时采用最多的就是 RGB 模型。 对于每个像素,通过控制 R、 G、 B 三原色的合成比例则可决定该像素的最终显示颜色。 对于三原色 RGB 中的每一种颜色,可以像灰度图那 样使用 L 个等级来表示含有这种颜色成分的多少。 例如对于含有 256 个等级的红色, 0 表示不含红色成分,255表示含有 100%的红色成分。 同样绿色和蓝色也可以划分为 256 个等级。 这样每种原色可以用 8位二进制数据表示,于是 3 原色总共需要 24 位二进制数,这样能够表示出的颜色种类数目为 256 256 256=242 ,大约有 1600 万种,已经远远超过普通人所能分辨出的颜色数目。 未经压缩的原始 BMP 文件就是使用 RGB 标准给出的 3 个数值来存储图像数 据的,称为 RGB 图像。 在 RGB 图像中每个像素都是用 24 位二进制数表示,故也称为 24 位真色彩图像。 ( 4)索引图像 如果对每个像素都直接使用 24位二进制数表示,图像文件的体积将变得十分庞大。 举个例子,对一个长、宽各为 200 像素,颜色数为 16 的彩色图像,每个像素都用 RGB 3 个分量表示,这样每个像素由 3 个字节表示,整个图像就是200 200 3=120kB。 这种完全未经压缩的表达方式,浪费了大量的存储空间,下面介绍一种更节省空间的存储方式:索引图像。 同样还是 200 像素 200 像素的 16 色图像,由于这张图片中最 多只有 16 种颜色,那么可以使用一张颜色表 (16 3的二维数组 )保存这 16种颜色对应的 RGB 值, 10 在表示图像的矩阵中使用这 16种颜色在颜色表中的索引(偏移量 ) 作为数据写入相应的行列位置。 3 VC++的图像处理简介 位图文件及其 C++操 作 Windows 操作系统中使用最多的图形文件格式就是位图格式,最常见的位图文件的扩展名为 BMP。 BMP 是英文 Bitmap(位图)的简写,这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,因此占用的磁盘空间较大。 设备无关位图 以后的 BMP 位图文件格式与显示设备无关,因此把这种 BMP 位图文件称为设备无关位图( device independent bitmap, DIB)。 DIB 自带颜色信息,因此调色板管理非常简单。 现在,任何 Windows 操作系统的计算机都能够显示和处理 DIB,它通常以 BMP 文件的形式被把保存在磁盘中。 BMP 图像文件数据结构 典型的 BMP 图像文件由以下 4 部分组成,如图 所示。 ( 1)位图文件头数据结构 BITMAPFILEHEADER,包含 BMP 图像文件的类型、显示内容等信息。 ( 2)位图信息头数据结构 BITMAPINFOHEADER,包含有 BMP 图像的宽、高、压缩方法以及定义颜色等信息。 ( 3)调色板,即颜色索引表。 ( 4)实际的位图数据。 1.位图文件 BITMAPFILEHEADER 结构 位图文件头 BITMAPFILEHEADER 的定义可以再 MFC Library 中找到,这部分文件头包含了文件的类型、大小以及设备无关位图的图像文件布局。 11 单色 D IB 有 2 个表项 16 色 D IB 有 16 个表项或更少 256 色 D IB 有 256 个表项或更少 真彩色 D IB 没有调色板 每个表项长度为 4 字节( 32 位) 像素按照每行每列的顺序排列 每一行的字节数必须是 4 的整数倍 b i S i z e b i W i d t h b i H e i g h t b i P l a n e s b i Bit Co u n t b i Co m p re s s i o n b i S i z e Im a g e b i X P e l s P e rM e t e r b i Y P e l s P e rM e t e r b i ClrU s e d b i ClrIm p o rta n t b f T y p e = ” BM ” b f S i z e b f Re s e rv e d 1 b f Re s e rv e d 2 b f O f f Bit s BI TM A PF I LE H EA D ER 位图文件头 (只用于 BM P 文件) BI TM A PI N FO H EA D ER 位图信息头 Pa l e tt e 调色板 D I B Pi x e l s D I B 图像数据 图 BMP文件的组成 the position of BMP file BITMAPFILEHEADER 结构体长度固定,为 14 字节,其定义和描述如下: typedef struct tagBITMAPFILEHEADER{ WORD bfType。 DWORD bfSize。 WORD bfReserved1。 WORD bfReserved2。 DWORD bfOffBits。 }BITMAPFILEHEADER, *PBITMAPFILEHEADER; 各个域的说明如下: 12 bfType:指定 文件类型,必须是 0x424D,即字符串“ BM”,也就是说所有“ .bmp”文件的头两个字节都是“ BM”。 bfSize:指定文件大小,包括这 14 个字。 bfReserved1, bfReserved2:为保留字,不用考虑。 bfOffBits:为从文件头到实际的位图数据的偏移字节数,即下图中前三个部分的和。 2.位图信息头 BITMAPINFOHEADER 结构 BITMAPINFOHEADER 结构体包含了设备无关位图关于颜色维度和色彩格式的信息,其定义和描述如下: typedef struct tagBITMAPINFOHEADER{ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; }BITMAPINFOHEADER, *PBITMAPINFOHEADER 该结构的长度也是固定的,为 40 个字节。 各个域的说明如下: biSize:指定这个结构的长度,为 40字节。 biWidth:指定图像的宽度,单位是像素。 biHeight:指定图像的高度,单位是像素。 biPlanes:必须是 1,不用考虑。 biBitCount:指定表示颜色时要用到的位数,常用的值为 1(黑白二色图)、 4( 16 13 色图)、 8( 256 色)、 24(真彩色),新的“ .bmp”格式支持 32 位色,这里就不做讨论了。 biCompression:指定位图是否压缩,有效的值为 BIRGB, BIRLE8, BIRLE4,BIBITFIELDS(都是 Windows 定义好的常量)。 要说明的是, Windows 位图可以采用 RLE4 和 RLE8 的压缩格式,但用的不多。 今后所讨论的只有第一种不压缩的情况,即 biCompression 为 BIRGB 的情况。 biSizeImage:指定实际的位图数据占用的字节数。 biXPelsPerMeter:指定目标设备的水平分辨率,单位是像素 /米。 biYPelsPerMeter:指定目标设备的垂直分辨率,单位 是像素 /米。 biClrUsed:指定本图像实际用到的颜色数,如果该项为 0,则用到的颜色数为2的 biCompression 次幂。 biClrImportant:指定本图像中重要的颜色数,如果该值为 0,则认为所有的颜色都是重要的。 3.调色板结构 有些位图需要调色板,有些位图,如真彩色图,不需要调色板,它们的BITMAPINFOHEADER 后面直接是位图数据。 调色板实际上是一个数组,共有 biClrUsed 个元素(如果该值为 0,则有 2 的biBitCount 次幂个元素)。 数组中每个元素的类型是一个 RGBQUAD 结构,占 4 个字节,其定义如下: typedef struct tagRGBQUAD BYTE rgbBlue。 BYTE rgbGreen。 BYTE rgbRed。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。