VC数字图像处理编程

合集下载

VC++图形图像处理源代码

VC++图形图像处理源代码

delete pData; pData=NULL;
if(m_pBMI!=NULL) delete m_pBMI; m_pBMI=NULL; if(pfi!=NULL)
delete pfi; pfi=NULL; } CAvi::CAviCreate(CString &string)//读文件初始化该类 { HRESULT hr; pfi=new AVIFILEINFO; hr = AVIFileOpen(&pfile, // returned file pointer string, // file name OF_READ, // mode to open file with NULL); hr= AVIFileInfo(pfile, file://获取 AVI 信息,放入 pfi 中 pfi, sizeof(AVIFILEINFO) ); cx=pfi­>dwWidth;//图象宽、高 cy=pfi­>dwHeight; hr=AVIFileGetStream(//将 AVI 变成视频流 pfile, &pavi, streamtypeVIDEO, 0//LONG lParam ); m_pBMI=new BITMAPINFO;//定义 BMP 信息头 m_pBMI­>bmiHeader.biBitCount=24; m_pBMI­>bmiHeader.biClrImportant=0; m_pBMI­>bmiHeader.biClrUsed=0; m_pBMI­>bmiHeader.biCompression=BI_RGB; m_pBMI­>bmiHeader.biHeight=cy; m_pBMI­>bmiHeader.biWidth=cx; m_pBMI­>bmiHeader.biPlanes=1; m_pBMI­>bmiHeader.biSize=sizeof(BITMAPINFOHEADER); m_pBMI­>bmiHeader.biXPelsPerMeter=0; m_pBMI­>bmiHeader.biYPelsPerMeter=0; m_pBMI­>bmiHeader.biSizeImage=cx*cy*3; pData=(BYTE*)new char[cx*cy*3];//根据 AVI 中 BMP 图象的信息定义缓冲区 } BOOL CAvi::AviRead(int mFrame)//将 AVI 文件的 M 帧数据读入 PData 缓冲区 { HRESULT hr; hr= AVIStreamRead( pavi, mFrame, 1, pData, cx*cy*3,

基于VC++的数字图像处理系统的设计与实现

基于VC++的数字图像处理系统的设计与实现

度 级 图像 的 编 辑 , 以 进 行 图 像 导 入 和 导 出 , 图 设 置 , 以 调 整 图 片 尺 寸 , 转 和 翻 转 图 片 , 片 增 强 优 可 视 可 旋 图 化, 图像 边 缘 检 测 与 分 割 , 像 编 码 以及 打 印 输 出 图 片 。 图 关 键 词 : 字 图 像 处 理 ; 度 级 图像 ; 像 编 辑 数 灰 图
从 CW iAp 、 n p CDo u n 、 Viw、 c me t C e CM DI a w n 、 Fr me d CM DI i w n 类 对 应 地 派 生 出 C iAp Ch1 d d Ja p、 C iDo 、 Ja e CMan r me CCh lFr me五 个 类 , 五 个 类 的 实 例 分 别 是 应 用 程 序 对 象 、 档 对 象 、 Ja c C iViw、 iF a 、 i d a 这 文
l 数 字 图 像 处 理 系 统 开 发 技 术 基 础 1 1 C+ + 语 言 及 VC+ + 平 台 简 介 .
C +语 言 是 一个 面 向对 象 的语 言 , + 使用 C+ + 编写 的代 码 更加 简 捷 、 效 , 具 可 维 护性 和 可 重 用 高 更
性。 ‘
资 源编辑 器 , 建立 项 目配 置 的项 目管理 器 , 检查 程序 错 误 的集成 调式 等 工具 , 同时 , 还 提供 了功 能强 大 的 它
应 用 程 序 向 导 Ap W i r p z d和 类 向 导 C a s i r a lsW z d工 具 。 a
1 2 M F 技 术 简 介 . C
* 收 稿 日 期 : O 0 O — 2 21~ 9 2
ห้องสมุดไป่ตู้

数字图像处理实验报告 (图像编码)

数字图像处理实验报告 (图像编码)

实验三图像编码一、实验内容:用Matlab语言、C语言或C++语言编制图像处理软件,对某幅图像进行时域和频域的编码压缩。

二、实验目的和意义:1. 掌握哈夫曼编码、香农-范诺编码、行程编码2.了解图像压缩国际标准三、实验原理与主要框架:3.1实验所用编程环境:Visual C++6.0(简称VC)3.2实验处理的对象:256色的BMP(BIT MAP )格式图像BMP(BIT MAP )位图的文件结构:(如图3.1)图3.1 位图的文件结构具体组成图:单色DIB 有2个表项16色DIB 有16个表项或更少 256色DIB 有256个表项或更少 真彩色DIB 没有调色板每个表项长度为4字节(32位) 像素按照每行每列的顺序排列每一行的字节数必须是4的整数倍biSize biWidth biHeight biPlanes biBitCount biCompression biSizeImagebiXPelsPerMeter biYPelsPerMeter biClrUsedbiClrImportantbfType=”BM ” bfSizebfReserved1 bfReserved2 bfOffBits BITMAPFILEHEADER位图文件头 (只用于BMP 文件)BITMAPINFOHEADER位图信息头Palette 调色板DIB Pixels DIB 图像数据3.3 数字图像基本概念数字图像是连续图像(,)f x y 的一种近似表示,通常用由采样点的值所组成的矩阵来表示:(0,0)(0,1)...(0,1)(1,0)(1,1)...(1,1).........(1,0)(1,1)...(1,1)f f f M f f f M f N f N f N M -⎡⎤⎢⎥-⎢⎥⎢⎥⎢⎥----⎣⎦每一个采样单元叫做一个像素(pixel ),上式(2.1)中,M 、N 分别为数字图像在横(行)、纵(列)方向上的像素总数。

用VC编程实现BMP图像裁切

用VC编程实现BMP图像裁切

5.5 用VC编程实现BMP图像裁切随着计算电子技术和计算机技术的发展,数字图像处理进入高速发展时期,许多成熟的图像处理软件如雨后春笋般层出不穷。

在大多数图像处理软件中都有图像裁切功能,用它能够快速提取感兴趣区域,去掉多余的图像内容。

那么怎样编程实现图像裁切呢,下面以BMP图像为例介绍一下如何用VC实现图像裁切。

先介绍第一种方法,将图像数据全部读入内存,然后将感兴趣区域裁切下来。

在许多数字图像处理的书中都有关于BMP图像存储结构的章节,这里就不再详细介绍了。

BMP文件一般分为四个部分:位图头文件、位图信息头、调色板和图像数据。

图像裁切要用到位图信息头中的几个参数值:biWidth(图像宽度)、biHeight(图像高度)、biBitCount(每个像素的位数)、biSizeImage(图像长度)。

图像裁切首先要确定裁切区域内每个像素在整幅图像中的位置,我们以裁切区域中心点像素位置起算,要注意的是图像数据的存储是从最下面一行的左边开始的。

如下图,Height是图像高,Width是图像宽,ctPoint是裁切区域中心点坐标,dwX和dwY分别是裁切区域的宽和高。

以256色图像为例(每个像素占一个字节),裁切区域左下角像素(也就是裁切后图像的第一个像素)位置为(Height-ctPoint.y-dwY/2-1)×Width+ctPoint.x-dwX/2,左下角像素位置确定了,裁切区域内的其他像素位置就很容易确定。

确定了裁切区域内每个像素的位置后,就可以把这些像素的值赋给裁切后图像的相应像素。

裁切后图像的位图信息头和调色板只要从原图像数据中拷贝就可以了,修改信息头中图像宽、高和长度值为裁切后的值。

按照上面的思路笔者用VC++ 6.0编写了一个图像裁切函数ClipDIB(),该函数首先计算裁切区域图像数据的大小,为裁切后的图像分配内存,然后将原图像的信息头、调色板拷贝给裁切后的图像,最后将原图像中裁切区域内的像素值赋给裁切后影像。

Vc++数字图像处理Matlab语音信号及信号处理

Vc++数字图像处理Matlab语音信号及信号处理

数字图像处理设计一、设计题目基于Visual C++的图像平滑、锐化处理 二、设计要求基于Visual C++的MFC 程序设计,实现对灰度图像简单的平滑处理与拉普拉斯锐化处理。

并能得到处理后所需的图像。

三、设计原理 (一)、图像平滑1 图像平滑的基本概述图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量的图像处理方法。

2 图像平滑的基本方法 (1)线性滤波(领域平均法)对一些图像进行线性滤波可以去除图像中某些类型的噪声。

领域平均法就是一种非常适合去除通过扫描得到的图像中的噪声颗粒的线性滤波。

领域平均法是空间域平滑噪声技术。

对于给定的图像()j i f ,中的每个像素点()n m ,,取其领域S 。

设S 含有M 个像素,取其平均值作为处理后所得图像像素点()n m ,处的灰度。

用一像素领域内各像素灰度平均值来代替该像素原来的灰度,即领域平均技术。

领域S 的形状和大小根据图像特点确定。

一般取的形状是正方形、矩形及十字形等,S 的形状和大小可以在全图处理过程中保持不变,也可以根据图像的局部统计特性而变化,点(m,n)一般位于S 的中心。

如S 为3×3领域,点(m,n)位于S 中心,则()()∑∑-=-=++=1111,91,i j j n i m f n m f假设噪声n 是加性噪声,在空间各点互不相关,且期望为0,方差为2σ,图像g 是未受污染的图像,含有噪声图像f 经过加权平均后为()()()()∑∑∑+==j i n M j i g M j i f M n m f ,1,1,1,由上式可知,经过平均后,噪声的均值不变,方差221σσM=,即方差变小,说明噪声强度减弱了,抑制了噪声。

(2)中值滤波中值滤波是一种非线性滤波,由于它在实际运算过程中并不需要图像的统计特性,所以比较方便。

但是对一些细节多,特别是点、线、尖顶细节多的图像不宜采用中值滤波的方法。

数字图像处理领域的二十四个典型算法

数字图像处理领域的二十四个典型算法

数字图像处理领域的⼆⼗四个典型算法数字图像处理领域的⼆⼗四个典型算法及vc实现、第⼀章⼀、256⾊转灰度图⼆、Walsh变换三、⼆值化变换四、阈值变换五、傅⽴叶变换六、离散余弦变换七、⾼斯平滑⼋、图像平移九、图像缩放⼗、图像旋转数字图像处理领域的⼆⼗四个典型算法及vc实现、第三章图像处理,是对图像进⾏分析、加⼯、和处理,使其满⾜视觉、⼼理以及其他要求的技术。

图像处理是信号处理在图像域上的⼀个应⽤。

⽬前⼤多数的图像是以数字形式存储,因⽽图像处理很多情况下指数字图像处理。

本⽂接下来,简单粗略介绍下数字图像处理领域中的24个经典算法,然后全部算法⽤vc实现。

由于篇幅所限,只给出某⼀算法的主体代码。

ok,请细看。

⼀、256⾊转灰度图算法介绍(百度百科):什么叫灰度图?任何颜⾊都有红、绿、蓝三原⾊组成,假如原来某点的颜⾊为RGB(R,G,B),那么,我们可以通过下⾯⼏种⽅法,将其转换为灰度: 1.浮点算法:Gray=R*0.3+G*0.59+B*0.11 2.整数⽅法:Gray=(R*30+G*59+B*11)/100 3.移位⽅法:Gray =(R*28+G*151+B*77)>>8; 4.平均值法:Gray=(R+G+B)/3; 5.仅取绿⾊:Gray=G; 通过上述任⼀种⽅法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统⼀⽤Gray替换,形成新的颜⾊RGB(Gray,Gray,Gray),⽤它替换原来的RGB(R,G,B)就是灰度图了。

灰度分为256阶。

所以,⽤灰度表⽰的图像称作灰度图。

程序实现: ok,知道了什么叫灰度图,下⾯,咱们就来实现此256⾊灰度图。

这个Convert256toGray(),即是将256⾊位图转化为灰度图:void Convert256toGray(HDIB hDIB) { LPSTR lpDIB; // 由DIB句柄得到DIB指针并锁定DIB lpDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB); // 指向DIB象素数据区的指针 LPSTR lpDIBBits; // 指向DIB象素的指针 BYTE * lpSrc; // 图像宽度 LONG lWidth; // 图像⾼度 LONG lHeight; // 图像每⾏的字节数 LONG lLineBytes; // 指向BITMAPINFO结构的指针(Win3.0) LPBITMAPINFO lpbmi; // 指向BITMAPCOREINFO结构的指针 LPBITMAPCOREINFO lpbmc; // 获取指向BITMAPINFO结构的指针(Win3.0) lpbmi = (LPBITMAPINFO)lpDIB; // 获取指向BITMAPCOREINFO结构的指针 lpbmc = (LPBITMAPCOREINFO)lpDIB; // 灰度映射表 BYTE bMap[256]; // 计算灰度映射表(保存各个颜⾊的灰度值),并更新DIB调⾊板 int i,j; for (i = 0; i < 256;i ++) { // 计算该颜⾊对应的灰度值 bMap[i] = (BYTE)(0.299 * lpbmi->bmiColors[i].rgbRed + 0.587 * lpbmi->bmiColors[i].rgbGreen + 0.114 * lpbmi->bmiColors[i].rgbBlue + 0.5); // 更新DIB调⾊板红⾊分量 lpbmi->bmiColors[i].rgbRed = i; // 更新DIB调⾊板绿⾊分量 lpbmi->bmiColors[i].rgbGreen = i; // 更新DIB调⾊板蓝⾊分量 lpbmi->bmiColors[i].rgbBlue = i; // 更新DIB调⾊板保留位 lpbmi->bmiColors[i].rgbReserved = 0; } // 找到DIB图像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); // 获取图像宽度 lWidth = ::DIBWidth(lpDIB); // 获取图像⾼度 lHeight = ::DIBHeight(lpDIB); // 计算图像每⾏的字节数 lLineBytes = WIDTHBYTES(lWidth * 8); // 更换每个象素的颜⾊索引(即按照灰度映射表换成灰度值) //逐⾏扫描 for(i = 0; i < lHeight; i++) { //逐列扫描 for(j = 0; j < lWidth; j++) { // 指向DIB第i⾏,第j个象素的指针 lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j; // 变换 *lpSrc = bMap[*lpSrc]; } } //解除锁定 ::GlobalUnlock ((HGLOBAL)hDIB); }变换效果(以下若⽆特别说明,图⽰的右边部分都是为某⼀算法变换之后的效果):程序实现:函数名称:WALSH()参数:double * f - 指向时域值的指针double * F - 指向频域值的指针r -2的幂数返回值:⽆。

利用VB与VC混合编程实现数字印花的图像处理

利用VB与VC混合编程实现数字印花的图像处理

现代制造工程2007年第1期CAD/CAE/CAPP/CAM利用VB与VC混合编程实现数字印花的图像处理詹白勺,梅顺齐,陈小兰(武汉科技学院,武汉430073)摘要:织物吸收墨水能力的差异、经向和纬向的属性不同,造成数字印花过程中出现偏色和不期望条纹的现象,达不到理想的印花效果。

针对这种问题提出在印花之前对图像进行合理的处理方案,即调整图像各种颜色的灰度值,将调整后的误差按不同的比例分配到经向和纬向的点上,使得在经向和纬向的点得到不同程度的补偿。

介绍用VC编写动态连接库(DLL)、在VB中调用的方法来开发对数字印花的图像处理软件,以适应不同的织物,从而提高印花质量。

关键词:图像处理;数字印花;动态连接库中图分类号:TP391 文献标识码:A 文章编号:1671—3133(2007)01—0050—03Usi n g VB and VC m i x2programm i n g to rea li ze i m ageprocessi n g for d i g ita l fabr i c pr i n ti n gZhan Bai2shao,Mei Shun2qi,Chen Xiao2lan(W uhan University of Science and Engineering,W uhan430073,CHN) Abstract:Because the differences of fabric abs orbing ink and attribute of war p and woof result in the leaning col or and unexpected stri pe,which appear in the digital dye p rinting p r ocess,the dye p rinting effect is not ideal.Pr oposes the reas onable s oluti on t o i m2 age p r ocessing ai m ing at this kind of questi on before the dye p rinting,na mely it is that adjusting each kind of col or gradati on value of i m age and distributing the err or t o the war p and woof s pots according t o the different p r oporti onal.Then the war p and woof s pots will be co mpensated differently.And intr oduces the way that p r ogra mm ing Dyna m ic L inking L ibrary(DLL)in VC,called in VB co m2 p iles t o the digital dye p rinting i m agery p r ocessing s oft w are t o adap t the different fabric,thus i m p r oves the dye p rinting quality.Key words:I m age p r ocessing;D igital dye p rinting;DLL 数字印花是一种集机械、计算机、电子信息技术、纺织、化工等为一体的高新技术,其先进的生产原理及手段,给纺织印染带来了前所未有的发展机遇。

VC 数字图像边缘检测算法研究与实现

VC  数字图像边缘检测算法研究与实现

---------------------------------------------------------------范文最新推荐------------------------------------------------------ VC++数字图像边缘检测算法研究与实现摘要图像中包含了人类所需要的感知世界,进而认识世界、改造世界的大部分信息量。

图像处理就是对图像信息进行加工处理,以满足人的视觉心理和实际应用的要求,理解图像、识别图像中的目标是计算机视觉图像处理的中心任务。

8673图像的边缘是图像最基本的特征,它是灰度不连续的结果。

图像分析和理解的第一步是边缘检测,因此边缘检测在图像处理中有着重要的作用。

图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。

本课题用VC++实现了五种经典图像边缘检测算子,并且比较了它们的检测效果,分析各算子的特点,对学习边缘检测和具体工程应用具有很好的参考价值。

1 / 10关键词: 图像处理,边缘检测, 算子,VC++毕业设计说明书(论文)外文摘要TitleComparison And Analysis For Image EdgeDetection Algorithms Based On VCAbstractImage contains a human need to perceive the world, and know the world, transforming the world most of the information quantity. Image processing of image information processing, to meet people&#39;s visual psychological and the requirement in practical application, image understanding, recognition of the target in the image is the central task of computer vision image processing.Edge is the most basic feature of the images, it is the result of discontinuous gray. The first step in image analysis and understanding is edge detection, so edge detection plays an important role in image processing. Image edge detection---------------------------------------------------------------范文最新推荐------------------------------------------------------significantly reduces the amount of data and removes irrelevant information, retains the important structural properties of images.致谢40参考文献.1.1数字图像基础1.1.1数字图像概述人眼能识别的自然景象或图像原也是一种模拟信号,为了使计算机能够记录和处理图像、图形,必须首先使其数字化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图像处理就是对图像信息进行加工处理,以满足人的视觉心理和实际应用的需要。

简单的说,依靠计算机对图像进行各种目的的处理我们就称之为数字图像处理。

早期的数字图像处理的目的是以人为对象,为了满足人的视觉效果而改善图像的质量,处理过程中输入的是质量差的图像,输出的是质量好的图像,常用的图像处理方法有图像增强、复原等。

随着计算机技术的发展,有一类图像处理是以机器为对象,处理的目的是使机器能够自动识别目标,这称之为图像的识别.图像处理技术博大精深,不仅需要有很强的数学功底,还需要熟练掌握一门计算机语言,在当前流行的语言中,Visual C++这个开发平台是图像开发人员的首选工具。

第一节图像的文件格式要利用计算机对数字化图像进行处理,首先要对图像的文件格式要有清楚的认识,自然界的图像以模拟信号的形式存在,在用计算机进行处理以前,首先要数字化,比如摄像头(CCD)摄取的信号在送往计算机处理前,一般情况下要经过数模转换,这个任务常常由图像采集卡完成,它的输出一般为裸图的形式;如果用户想要生成目标图像文件,必须根据文件的格式做相应的处理。

随着科技的发展,数码像机、数码摄像机已经进入寻常百姓家,我们可以利用这些设备作为图像处理系统的输入设备来为后续的图像处理提供信息源。

无论是什么设备,它总是提供按一定的图像文件格式来提供信息,比较常用的有BMP 格式、JPEG格式、GIF格式等等,所以我们在进行图像处理以前,首先要对图像的格式要有清晰的认识,只有在此基础上才可以进行进一步的开发处理。

在讲述图像文件格式前,先对图像作一个简单的分类。

除了最简单的图像外,所有的图像都有颜色,而单色图像则是带有颜色的图像中比较简单的格式,它一般由黑色区域和白色区域组成,可以用一个比特表示一个像素,"1"表示黑色,"0"表示白色,当然也可以倒过来表示,这种图像称之为二值图像。

我们也可以用8个比特(一个字节)表示一个像素,相当于把黑和白等分为256个级别,"0"表示为黑,"255"表示为白,该字节的数值表示相应像素值的灰度值或亮度值,数值越接近"0",对应像素点越黑,相反,则对应像素点越白,此种图像我们一般称之为灰度图像。

单色图像和灰度图像又统称为黑白图像,与之对应存在着彩色图像,这种图像要复杂一些,表示图像时,常用的图像彩色模式有RGB模式、CMYK模式和HIS模式,一般情况下我们只使用RGB模式,R 对应红色,G对应绿色,B对应蓝色,它们统称为三基色,这三中色彩的不同搭配,就可以搭配成各种现实中的色彩,此时彩色图像的每一个像素都需要3个样本组成的一组数据表示,其中每个样本用于表示该像素的一个基本颜色。

对于现存的所有的图像文件格式,在这里主要介绍BMP图像文件格式,并且文件里的图像数据是未压缩的,因为图像的数字化处理主要是对图像中的各个像素进行相应的处理,而未压缩的BMP图像中的像素数值正好与实际要处理的数字图像相对应,这种格式的文件最合适我们对之进行数字化处理。

请读者记住,压缩过的图像是无法直接进行数字化处理的,如JPEG、GIF等格式的文件,此时首先要对图像文件解压缩,这就要涉及到一些比较复杂的压缩算法。

后续章节中我们将针对特殊的文件格式如何转换为BMP格式的文件问题作专门的论述,经过转换,我们就可以利用得到的未压缩的BMP文件格式进行后续处理。

对于JPEG、GIF等格式,由于涉及到压缩算法,这要求读者掌握一定的信息论方面的知识,如果展开的话,可以写一本书,限于篇幅原因,我们只作一般性的讲解,有兴趣的朋友可以参考相关书籍资料。

一、BMP文件结构1. BMP文件组成BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。

文件头主要包含文件的大小、文件类型、图像数据偏离文件头的长度等信息;位图信息头包含图象的尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信息。

颜色信息包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板,但如果图像为真彩色,既图像的每个像素用24个比特来表示,文件中就没有这一块信息,也就不需要操作调色板。

文件中的数据块表示图像的相应的像素值,需要注意的是:图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是说,在BMP文件中首先存放的是图像的最后一行像素,最后才存储图像的第一行像素,但对与同一行的像素,则是按照先左边后右边的的顺序存储的;另外一个需要读者朋友关注的细节是:文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数。

2. BMP文件头BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。

3. 位图信息头BMP位图信息头数据用于说明位图的尺寸等信息。

注意:对于BMP文件格式,在处理单色图像和真彩色图像的时候,无论图象数据多么庞大,都不对图象数据进行任何压缩处理,一般情况下,如果位图采用压缩格式,那么16色图像采用RLE4压缩算法,256色图像采用RLE8压缩算法。

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

颜色表中RGBQUAD结构数据的个数由BITMAPINFOHEADER 中的biBitCount项来确定,当biBitCount=1,4,8时,分别有2,16,256个颜色表项,当biBitCount=24时,图像为真彩色,图像中每个像素的颜色用三个字节表示,分别对应R、G、B值,图像文件没有颜色表项。

位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:注意:RGBQUAD数据结构中,增加了一个保留字段rgbReserved,它不代表任何颜色,必须取固定的值为"0",同时, RGBQUAD结构中定义的颜色值中,红色、绿色和蓝色的排列顺序与一般真彩色图像文件的颜色数据排列顺序恰好相反,既:若某个位图中的一个像素点的颜色的描述为"00,00,ff,00",则表示该点为红色,而不是蓝色。

5. 位图数据位图数据记录了位图的每一个像素值或该对应像素的颜色表的索引值,图像记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。

这种格式我们又称为Bottom_Up位图,当然与之相对的还有Up_Down形式的位图,它的记录顺序是从上到下的,对于这种形式的位图,也不存在压缩形式。

位图的一个像素值所占的字节数:当biBitCount=1时,8个像素占1个字节;当biBitCount=4时,2个像素占1个字节;当 biBitCount=8时,1个像素占1个字节;当biBitCount=24时,1个像素占3个字节,此时图像为真彩色图像。

当图像不是为真彩色时,图像文件中包含颜色表,位图的数据表示对应像素点在颜色表中相应的索引值,当为真彩色时,每一个像素用三个字节表示图像相应像素点彩色值,每个字节分别对应R、G、B分量的值,这时候图像文件中没有颜色表。

二、GIF图像文件格式GIF图象格式的全称为Graphics Interchange Format,从这个名字可以看出,这种图像格式主要是为了通过网络传输图像而设计的。

GIF文件不支持24位真彩色图像,最多只能存储256色的图像或灰度图像;GIF格式文件也无法存储CMY和HIS模型的图像数据;另外,GIF图像文件的各种数据区域一般没有固定的数据长度和存储顺序,所以为了方便程序寻找数据区,将数据区中的第一个字节作为标志符;最后需要读者注意的是GIF文件存储图像数据是有二种排列顺序:顺序排列或交叉排列。

交叉排列的方式适合网络传输,这样一来允许用户在不完全掌握图像数据之前,获取当前图像的轮廓数据。

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

其中第一和第二两个块用GIF图像文件头结构描述:GIF格式中的调色板有通用调色板和局部调色板之分,因为GIF格式允许一个文件中存储多个图像,因此有这两种调色板,其中通用调色板适于文件中的所有图像,而局部调色板只适用于某一个图像。

格式中的数据区域一般分为四个部分,图像数据识别区域,局部调色板数据,采用压缩算法得到的图象数据区域和结束标志区域。

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

三、JEPG图像文件JEPG简称为联合摄影专家小组,作为一种技术,主要用于数字化图像的标准编码,JPEG主要采用有损的压缩编码方式,它比GIF、BMP图像文件要复杂的多,这不是短短的几页篇幅可以将清楚的,万幸的是,我们可以通过一些别的方法将该格式转化为BMP格式。

读者需要知道的是在对JEPG文件格式编码时,通常需要分为以下四步:颜色转化、DCT变换、量化、编码。

以上介绍了一些常用的图像文件,对比较复杂的格式,如GIF和JEPG,仅仅作了极其浮浅的介绍,后文我们会和它们作进一步的接触。

实际应用中,还有许多图像格式,文章中都没有提到,读者如果需要做进一步的研究,还需要参考一些关于图像格式方面的资料。

BMP图像的基本操作上一讲我们主要介绍了图像的格式,其中重点说明了BMP文件的存储格式,同时对JEPG和GIF等常用格式作了简单的介绍。

本节主要讲述如何操作BMP文件,如对其读、写和显示等。

在实现数字图象处理的过程中,主要是通过对图像中的每一个像素点运用各种图像处理算法来达到预期的效果,所以进行图像处理的第一步,也是我们最关心的问题,是如何得到图像中每一个像素点的亮度值;为了观察和验证处理的图像效果,另一个需要解决的问题是如何将处理前后的图像正确的显示出来。

我们这章内容就是解决这些问题。

随着科技的发展,图像处理技术已经渗透到人类生活的各个领域并得到越来越多的应用,但是突出的一个矛盾是图像的格式也是越来越多,目前图像处理所涉及的主要的图像格式就有很多种,如TIF、JEMP、BMP等等,一般情况下,为了处理简单方便,进行数字图像处理所采用的都是BMP格式的图像文件(有时也称为DIB格式的图像文件),并且这种格式的文件是没有压缩的。

我们通过操作这种格式的文件,可以获取正确显示图像所需的调色板信息,图像的尺寸信息,图像中各个像素点的亮度信息等等,有了这些数据,开发人员就可以对图像施加各种处理算法,进行相应的处理。

如果特殊情况下需要处理其它某种格式的图像,如GIF、JEMP等格式的图象文件,可以首先将该格式转换为BMP格式,然后再进行相应的处理。

相关文档
最新文档