数字图像与模式识别

2022-08-27

第一篇:数字图像与模式识别

《数字图像处理与分析》课程教学大纲

英文名称:Digital Image Processing and Analysis 课程号:19139314

一、课程基本情况

1. 学

分: 2

2. 学

时: 32

3. 课程类别:选修课

4. 适用对象:电子与通信工程领域专业学位研究生 5. 开课学期:第二学期

6. 开课单位:通信与电子工程学院

二、课程教学目的与要求

1. 教学目的:

该课程系统学习数字图像处理的中高级层次的内容。其主要任务是使学生在掌握数字图像处理常用技术的基础上,进一步学习图像解译的前沿方法和技术,并初步具备设计数字图像处理应用系统的能力。该课程主要内容包括概论、小波变换、图像分割、特征表述、对象识别、图像工程应用实例等。

2. 教学要求:

使学生在具有数字图像处理常用技术的基础上,进一步掌握小波变换、图像分割、目标表达和描述技术、特征测量技术等图像处理与分析领域的前沿方法和技术,并初步具备设计数字图像处理应用系统的能力,为学生进一步进行科学研究奠定坚实的基础。

三、课堂教学内容及课时安排

第一章 图像处理基础

教学内容:

本章讲授数字图像处理的基本原理和一些必备的数学工具:掌握数字图像采集和获取的基本概念和方法、掌握数字图像的各类增加方法、恢复方法、彩色图像处理以及变化方法。

教学重点:数字图像采集和获取的基本概念和方法、数字图像的各类增加方法、恢复方法、彩色图像处理以及变化方法。

教学难点:彩色图像处理以及变化方法 课时分配:讲授2学时,讨论2学时 教学方法与手段:讲授法,案例教学法

第二章 小波变换

教学内容:

本章学习图像小波变换的基本的的基本概念、掌握连续小波变换、二进小波变换、Haar变换、离散小波变换、多分辨率分析、快速小波变换算法、离散小波变换的设计、二维离散小波变换、双正交小波变换、Gabor变换及其应用。

教学重点:多分辨率分析、快速小波变换算法、离散小波变换的设计、二维离散小波变换、双正交小波变换和应用。

教学难点:Gabor变换及其应用。 课时分配:讲授2学时,讨论2学时 教学方法与手段:讲授法,案例教学法

第三章 图像分割

教学内容:

本章要求了解图像分割定义和方法分类,掌握边缘检测的基本原理和方法。掌握边界跟踪和图搜索、阈值分割、基于变换直方图选取阈值、空间聚类、区域生长、彩色图象分割及其应用。

教学重点:边界跟踪和图搜索、阈值分割、基于变换直方图选取阈值、空间聚类、区域生长、彩色图象分割及其应用。

教学难点:彩色图象分割及其应用 课时分配:讲授2学时,讨论2学时 教学方法与手段:讲授法,案例教学法

第四章 目标表达和描述技术

教学内容:

本章要求了解边界的链码表达,边界线段的近似表达,目标的层次表达,目标的骨架表达,运动的表达,目标轮廓的傅里叶描述,目标轮廓的小波描述及其应用。

教学重点:边界的链码表达,边界线段的近似表达,目标的层次表达,目标的骨架表达,运动的表达,目标轮廓的傅里叶描述,目标轮廓的小波描述及其应用。

教学难点:目标轮廓的小波描述及其应用 课时分配:讲授2学时,讨论4学时 教学方法与手段:讲授法,案例教学法

第五章 特征测量技术

教学内容:

本章要求了解特征测量技术的基本原理,掌握轮廓基本参数及测量、区域基本参数及测量、区域形状参数及测量、区域纹理参数及测量、轮廓矩和区域矩、特征测量的精确度分析与讨论。

教学重点:轮廓基本参数及测量、区域基本参数及测量、区域形状参数及测量、区域纹理参数及测量、轮廓矩和区域矩、特征测量的精确度分析与讨论。

教学难点:特征测量的精确度分析与讨论

课时分配:讲授2学时,讨论4学时,图像测量过程演示2学时 教学方法与手段:讲授法,案例教学法

第六章 图像工程应用

教学内容:

本章要求了解基于OpenCV的人脸检测应用,掌握Haar特征检测原理与Haar特征分类器的训练,掌握如何在OpenCV中使用Haar特征分类器来对图像中的人脸进行检测和识别,分析人脸识别示例代码,讨论人脸识别程序运行精度与改进方法。

教学重点:如何在OpenCV中使用Haar特征分类器来对图像中的人脸进行检测和识别,分析人脸识别示例代码,讨论人脸识别程序运行精度与改进方法。

教学难点:人脸识别程序运行精度与改进方法

课时分配:讲授2学时,讨论4学时,人脸识别示例代码演示2学时 教学方法与手段:讲授法,案例教学法

四、考核方法

1. 考核方式:考查 2. 考核形式:开卷 3. 成绩评定方案:

平时成绩30%,期末考试成绩70%。

平时成绩包括:出勤5%,讨论表现10%,情景演示15%

五、选用教材和主要参考资料

《图像工程(第3版)》,章毓晋编著,清华大学出版社,2013年,第3版;

《图像处理和分析技术(第2版)》,章毓晋编著,高等教育出版社,2008年,第2版; 《图像处理与分析》,TonyF.Chan著,科学出版社,2011年,第1版;

撰写人:何鹏

审定人:姚仲敏 批准人:姚仲敏

执行时间:2015年秋

第二篇:模式识别与智能系统

所属院系:自动化科学与工程学院

一、学科概况

模式识别与智能系统是在信号处理、人工智能、控制论、计算机技术等学科基础上发展起来的新型学科。该学科以各种传感器为信息源,以信息处理与模式识别的理论技术为核心,以数学方法与计算机为主要工具,探索对各种媒体信息进行处理、分类、理解并在此基础上构造具有某些智能特性的系统或装置的方法、途径与实现,以提高系统性能。模式识别与智能系统是一门理论与实际紧密结合,具有广泛应用价值的控制科学与工程的重要学科分支。研

二、培养目标正门

本学科培养从事模式识别与智能系统的研究、开发、设计等方面工作的高级专门人才。业

1.博士学位 应具有模式识别、信息处理、人工智能与认知学及有关数学领域坚实宽广的基础理论和系统深入的专门知识;对于模式识别与智能系统主要前沿领域有深入了解;能独立开展模式识别与智能系统中有关研究方向的专题研究工作,并取得具有创造性研究成果;学风严谨,至少掌握一门国资语,能熟练地阅读本专业的外文资料,具有一定的写作能力和进行国际学术交流的能力。

2.硕士学位 应具有坚实的模式识别与智能系统学科的基础理论和系统的专门知识;对于模式识别与智能系统某一研究领域的进展和学术动态有较深的了解;能够熟练利用计算机解决本学科的有关问题;具有从事模式识别与智能系统中的某一研究方向的科学研究或独立担负专门技术工作的能力,并取得有意义的成果;较为熟练地掌握一门国资语。、

三、业务范围、

1.学科研究范围 模式识别,图象处理与分析,计算机视觉,智能机器人,人工智能,计算智能,信号处理。

2.主要课程设置 线性系统理论,矩阵分析,优化理论,数理逻辑,数字信号处理,图象处理与分析,模式识别,计算机视觉,人工智能,计算智能,非线性理论(如分形、混沌等)控制理论,系统分析与决策,计算机网络理论等。

四、主要相关学科

控制理论与控制工程,计算机科学与技术,信息与通信工程,电子科学与技术,生物学,心理学。

该学科培养的研究生毕业后,可到大、中、小型企业,科技部门,高等院校,金融、电讯单位,政府机关等各行业从事自动化和系统工程相关的科研、开发、设计、研制、生产与管理等工作。考

第一, 安阳县电业管理公司是严谨,规范的国资企业。尽管安阳县电业管理公司已经不是真正的国资企业,但是“国资企业”除了意味着享受优惠政策外,其真正含义在于,企业要严格按照国际惯例运作,建立完善的法人治理结构。前几年公司成立为股份有限公司,国家吃多半股份,放股给民众。股东是公司企业产权的拥有者,也可以说是企业的“老板”,公司的盈利或亏损全部由股东享受或承担。企业必须以感激地心态善待股东,正是由于股东投资办企业,才给了大家就业的机会,让员工能够过上稳定的生活,同时也为有志青年提供了充分体现和提升个人价值的机会。否则,你就是才高八斗,也是英雄无用武之地。古有萧何追韩信;没有刘备三顾茅庐,诸葛亮也永远只能是卧龙岗的一个学究。因此,每一个企业员工都应该将对股东的感激之情转化为工作的激情和动力,积极主动地做好每一件事,追求最好的工作业绩,以回报股东。安阳县电业管理公司是有着深厚文化底蕴和人性化管理的优秀企业。安阳县电业管理公司在关注股东价值的同时,对员工价值也给与了充分的肯定。

第二, 安阳县电业管理公司有恒久的价值判断标准:持久不断地创造价值。安阳县电业管理公司崇尚业绩,没有业绩的公司是没有生命力的。安阳县电业管理公司由原县电业局转型,强化以业绩为导向的价值取向,把业绩作为价值的衡量标准。“我们要让公司创造价值的员工享受体面的生活,让取得优异业绩的员工赢得人们的尊重”,安阳县电业管理公司致力于成本领先,低成本领先是放利给人民,获取生存和发展空间的根本策略,也是实现企业目标,实践企业使命的最重要的动力。电力企业属于资金密集型行业,这种密集主要体现在电力建设的投资巨大。因此,在建设中,应千方百计控制工程耗费和协调各方力量缩短建设工期,从源头降低公司的建设成本和经营固定成本,抢得竞争先机。而且在运营中,必须降低燃料的运输及治理费用,最低化变动成本,获得竞争优势,这也是检验企业专业化水平的重要标准。此外,充分发挥脱硫项目,做好保护环境的工作,发挥高技术成果并争取合理补偿,以提高营业能力,也将有助于使企业在同行中脱颖而出;安阳县电业管理公司具有强烈的市场意识,这也是创造价值不可或缺的重要因素。安阳县电业管理公司是由市场促生的商业化公司,因市场需要而存在。依市场要求运作,其精髓是合理和整合市场资源,并以市场标准来评价其优劣。

第三, 安阳县电业管理公司有凝聚力的企业精神:诚信,团队,务实,积极,专业,创新。诚信,为人之本,立业之本,是公司的基本精神,坚守诚信原则,重视个人操守,加强互信关系,巩固卓越商誉;团队,事业成功的保障,尊重不同文化,包容各种观念,倡导平等沟通,发挥团队精神;务实,对待工作应有的科学态度,激励奋发精神,壮大企业根基,奠定领导地位;积极,掌握主动地关键,积极迎接挑战,勇于面对改变,主动学习新知识;专业,公司持续成长的正确方向,整合丰富资源,荟萃各方精英,积累中外经验,提升专业水平;创新,不断适应新的经营模式是企业的不竭源泉,经营开放环境,鼓励创新思路,构思非凡理念,推动企业发展。

第四, 安阳县电业管理公司有特色鲜明的管理模块:基于务实,前瞻思维的管理行为。生产管理:安阳县电业管理公司坚持以成熟,先进的技术手段和科学的运作模式为支撑,不断强化包括人力资源在内的各种生产力,最大力度提高生产效能。每一岗位必须信守“按章办事”的承诺,工作严谨规范,确保生产过程的安全,稳定;营销管理:客户的要求是企业行动的准则也是企业发展的根本动力。安阳县电业管理公司重视客户关系,引入客户关系,对不同客户的特点实施有针对性地营销方案,满足客户期望,提升客户价值。广义的说,电网,政府及终端用户等利益相关者都是使电力业务对客户依赖的唯一性,决定了对客户服务的纵深程度要远远大于别的行业。电力营销的最终结果,将能够提高企业的合理回报。以上四点是我在安阳县电业管理公司实习时的深切体会,安阳县电业管理公司的企业精神值得我们思考和学习!而且,我发现安阳县电业管理公司员工的职业素养也很高。我觉得一个人的职业素养除了应具备专业的知识外,还应当包括两个方面:敬业精神和合作精神。电力部门重要的发电设备的正常运行需要各机组的协调合作,而有的高压水泵, 溢流水泵, 轴封水泵等却是比较容易坏的,这个时候就需要强烈的敬业精神。高压水泵漏水了,修理的员工们穿着闷热的工作服在现场维修着,现场是没有空调的,而且机器的运作声音很大,夏天长时间呆在工作现场使员工们的衣服都被汗水浸湿了。明明可以交给别的部门做的事,明明可以不需要继续工作了,可是他们还坚持把问题全都解决掉:等其他部门来的话就浪费了宝贵的时间了!而且,维修时也需要团队精神,我说过,现场的噪声很大,彼此讲话要很大声才能听见。可是,他们却不需要大叫。一个手势,一个眼神,同事们就明白了你的意思,这个不是只有团队合作才能做到的事吗?而且,当有人收到责任单时,我没看见暴跳如雷的抱怨和不满,我看见的是立即签单和着手改善事项的合作态度。其实,责任单上的错误不一定是当事人犯的,可是他为了小组为了同事,竟然去签单!这种精神,难道不值得我们学习吗?还有之后的改进措施,步步到位,没有任何推托。在这里我觉得稽核小组也应该负责到位,

开单要有根据,只有这样才能共同把企业做大做强!

通过这次的暑假实践,我学到了很多无法在书本上学到的知识和企业经营的实际经验,感谢安阳县电业管理公司给我的机会!

第三篇:安检机图像识别

我们使用X射线安检设备的目的是能够辅助安检人员在大流量的旅客流中快速、有效地发现行李内可能存在的违禁物品,尽可能少地进行开包检查。

那么,首先什么是违禁品呢?违禁品也就是通常所说的“三品”,它们是易燃、易爆品、腐蚀性物品、管制刀具和枪械。其中,易燃、易爆品包括汽油、酒精、爆竹、雷管、炸药、丁烷气体、化妆品、空气清新剂等。腐蚀性物品包括硫酸、盐酸、硝酸、王水、双氧水、强氧化性材料等。管制刀具和枪械包括弹簧刀、跳刀、三棱刀、砍刀、手刺、手枪等。这些违禁物品隐匿在行李中,在X光图像下各有各的形状特点以及颜色特点。

图1和图2分别是一些典型违禁品的实际图像和双能量材质图像。从中可见对于菜刀、匕首、改锥、剪刀等金属材质都是显示兰色调。鞭炮、爆竹显示绿色调。爆竹中间是黑火药,所以在中部显示绿色,爆竹的纸管是有机材质,因此显示为橙色。玩具手枪以及改锥的把柄和剪刀的把手是塑料的显示为黄绿色泽需要注意的是,丁烷气罐和矿泉水都是橙色的,而空气清新剂则是绿色的。对于打火机的辨认主要是看火头上的形状和色泽。火头周围是一层金属因而是兰色的。打火机机身是橙色的。

常见违禁品双能图像

图1 图2

请注意图2中的两袋粉末状的物品。一袋是食盐,另外一袋是白砂糖。白砂糖是有机物所以显示橙红色,食盐是无机物所以显示的是兰色。不能武断地说凡是兰色的就是金属。通常情况下,毒品以及爆炸物都是有机材料居多的。

各种物品无规则地叠加在一起。这就给图像判别带来了巨大的挑战。操作人员必须要对常见的违禁品的形状、颜色相当熟悉。经验的积累需要大量的观察和开包检测的结合。随着工作的逐步熟练,开包检查的次数也会大大减少。需要补充说明的是X光安检机也有固有的局限性。比如水、汽油、丁烷气体瓶都是有机物,无法从亚瑟上进行区分。这就是安检的时候必须要求乘客喝一口待检查的液体的理由。目前X射线安检设备在原理是还无法突破上诉局限,因此安检人员要谨慎对待那些所谓的“爆炸物、毒品自动报警”功能。这些功能往往存在非常大的误报率,在实际工作中意义不大。

第四篇:模式识别与智能信息处理

“模式识别与智能信息处理”学科方向研究内容

“模式识别与智能信息处理”是当今发展最快的热点领域,本领域以信息处理与模式识别的理论技术为核心,以数学方法与计算机为主要工具,探索对各种媒体信息进行处理、分类、理解并在此基础上构造具有某些智能特性的系统或装置的方法、途径与实现,以提高系统的性能。模式识别与智能处理是现代服务业信息支撑技术之一,是一个理论与实际紧密结合、具有广泛应用价值的重要领域。

一、计算机视觉与图像识别

以信息处理与模式识别的理论、方法和技术为核心,以数学方法和计算机为主要工具,探索对图像、图形(人脸、指纹、虹膜、静脉、步态、车牌等)的信息进行处理、分类、理解,并在此基础上构造具有智能特性的系统。

二、语音合成、识别和理解

研究非特定人大词汇量连续语音识别,语言模型与口语理解,说话人识别,口音识别,语音合成系统,对话系统,人机语音交互技术,音频信号处理、识别,以及语音应用系统开发。

三、计算机控制系统

以计算机为主要工具,以人脑仿真研究为基础,将人工智能技术、数据挖掘技术、嵌入式技术、人工神经网络理论等智能化方法用于信息系统、自动化系统和,以实现智能化信息处理和智能化控制。

热忱欢迎各位老师加入此方向!

第五篇:要识别图像中的字符

要识别图像中的字符,首先要会处理图像,把图像的信息读出来。这就必须先了解图像的结构,存储方式。清华大学出版的一本《数字图像处理编程入门》给了我不少帮助。第一章的Windows位图和调色板让我对bmp图像有了基本了解。对于彩色图,可以用RGB模型来表示。基本上所有颜色都可以用这三种颜色的组合来形成。但实际上也有一些差别,小于24位图都利用到了调色板,也就是一张R、G、B表,主要是为了节省存储空间。bmp文件结构如下:

第一部分为位图文件头BITMAPFILEHEADER,是一个结构,其定义如下:

typedefstructtagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER;

这个结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数),各个域的说明如下: bfType

指定文件类型,必须是0x424D,即字符串“BM”,也就是说所有.bmp文件的头两个字节都是“BM”。 bfSize

指定文件大小,包括这14个字节。 bfReserved1,bfReserved2

为保留字,不用考虑 bfOffBits

为从文件头到实际的位图数据的偏移字节数,即图1.3中前三个部分的长度之和。 第二部分为位图信息头BITMAPINFOHEADER,也是一个结构,其定义如下:

typedefstructtagBITMAPINFOHEADER{

DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;

这个结构的长度是固定的,为40个字节(LONG为32位整数),各个域的说明如下: biSize

指定这个结构的长度,为40。 biWidth

指定图象的宽度,单位是象素。

biHeight

指定图象的高度,单位是象素。

biPlanes

必须是1,不用考虑。

biBitCount

指定表示颜色时要用到的位数,常用的值为1(黑白二色图), 4(16色图), 8(256色), 24(真彩色图)(新的.bmp格式支持32位色,这里就不做讨论了)。

biCompression

指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定义好的常量)。要说明的是,Windows位图可以采用RLE4,和RLE8的压缩格式,但用的不多。我们今后所讨论的只有第一种不压缩的情况,即biCompression为BI_RGB的情况。

biSizeImage

指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:

biSizeImage=biWidth’ × biHeight

要注意的是:上述公式中的biWidth’必须是4的整倍数(所以不是biWidth,而是biWidth’,表示大于或等于biWidth的,最接近4的整倍数。举个例子,如果biWidth=240,则biWidth’=240;如果biWidth=241,biWidth’=244)。

如果biCompression为BI_RGB,则该项可能为零

biXPelsPerMeter

指定目标设备的水平分辨率,单位是每米的象素个数,关于分辨率的概念,我们将在第4章详细介绍。

biYPelsPerMeter

指定目标设备的垂直分辨率,单位同上。

biClrUsed

指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2biBitCount。

biClrImportant

指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。

第三部分为调色板Palette,当然,这里是对那些需要调色板的位图文件而言的。有些位图,如真彩色图,前面已经讲过,是不需要调色板的,BITMAPINFOHEADER后直接是位图数据。

调色板实际上是一个数组,共有biClrUsed个元素(如果该值为零,则有2biBitCount个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节,其定义如下:

typedefstructtagRGBQUAD {

BYTE rgbBlue; //该颜色的蓝色分量

BYTE rgbGreen; //该颜色的绿色分量

BYTE rgbRed; //该颜色的红色分量

BYTE rgbReserved; //保留值

} RGBQUAD;

第四部分就是实际的图象数据了。对于用到调色板的位图,图象数据就是该象素颜在调色板中的索引值。对于真彩色图,图象数据就是实际的R、G、B值。下面针对2色、16色、256色位图和真彩色位图分别介绍。

对于2色位图,用1位就可以表示该象素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个象素。

对于16色位图,用4位可以表示一个象素的颜色,所以一个字节可以表示2个象素。

对于256色位图,一个字节刚好可以表示1个象素。

对于真彩色图,三个字节才能表示1个象素,哇,好费空间呀!没办法,谁叫你想让图的颜色显得更亮丽呢,有得必有失嘛。

要注意两点:

(1) 每一行的字节数必须是4的整倍数,如果不是,则需要补齐。这在前面介绍biSizeImage时已经提到了。

(2) 一般来说,.bMP文件的数据从下到上,从左到右的。也就是说,从文件中最先读到的是图象最下面一行的左边第一个象素,然后是左边第二个象素„„接下来是倒数第二行左边第一个象素,左边第二个象素„„依次类推,最后得到的是最上面一行的最右一个象素。

当了解了这些后,就可以将图片灰度化,编程黑白二色图片。再读出bmp文件的像素信息,可以将其存储在一个一维数组里面,其他的信息还有宽度和高度。以后处理图片就是直接对这个数组进行处理。接下来是进行去噪处理。一些图片常常有噪点,对识别效果造成影响,所以必须进行去噪。去噪方法很多。我的做法是对一个像素点作如下处理:取它和周围8个点共9个点的像素的平均值,效果还可以。

接下来的操作我都是参考的一篇哈尔滨工业大学工学硕士学位论文,上面的思路很清晰,感觉很不错。首先是归一化,即将图片编程32*32大小的图片。

另一种方法是非线性归一化,但是上面的求质心和散度公式看不清楚,而且没有告诉怎么用质心和散度去实现归一化。所以我就采用了线性归一化。效果比非线性归一化要差一些。

归一化之后是特征提取。

网格特征就是将32*32的图片分成4*4共16块,每个方块64个小方块。求黑色像素的个数就行了。穿越特征包括水平穿越特征和垂直穿越特征。水平穿越特征即把图片按行分成8行,每行4小行。计算每一行由白色像素到黑色像素的变化次数即可。即得到前8维水平穿越特征t1,t2,..,t8。后8维水平穿越特征利用公式求解。Pi=ti/[(t1+t2+..+t8)*10+0.5]。垂直穿越特征则类似。

16维网格特征、16维水平穿越特征和16维垂直穿越特征合起来总共48维特征。还可以求加权特征,形成64维特征。

最后是模板匹配。根据相应特征值的差值的平方和进行匹配。

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include

8 #include

9

10 //------------------------- 11 //以下该模块是完成BMP图像(彩色图像是24bit RGB各8bit)的像素获取,并存在文件名为xiang_su_zhi.txt中

12 unsigned char *pBmpBuf;//读入图像数据的指针

13

14 intbmpWidth;//图像的宽

15 intbmpHeight;//图像的高

16 RGBQUAD *pColorTable;//颜色表指针

17

18 intbiBitCount;//图像类型,每像素位数

19

20 //----------------------------- 21 //读图像的位图数据、宽、高、颜色表及每像素位数等数据进内存,存放在相应的全局变量中

22 boolreadBmp(char *bmpName)

23 { 24

FILE *fp=fopen(bmpName,"rb");//二进制读方式打开指定的图像文件

25 26

if(fp==0) 27

return 0; 28

29

//跳过位图文件头结构BITMAPFILEHEADER 30

31

fseek(fp, sizeof(BITMAPFILEHEADER),0); 32

33

//定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中

34

35

BITMAPINFOHEADER head;

36

37

fread(&head, sizeof(BITMAPINFOHEADER), 1,fp); //获取图像宽、高、每像素所占位数等信息

38

39

bmpWidth = head.biWidth; 40

41

bmpHeight = head.biHeight; 42

43

biBitCount = head.biBitCount;//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)

44

45

intlineByte=(bmpWidth * biBitCount/8+3)/4*4;//灰度图像有颜色表,且颜色表表项为256 46

47

if(biBitCount==8) 48

{ 49

50

//申请颜色表所需要的空间,读颜色表进内存

51

52

pColorTable=new RGBQUAD[256]; 53

54

fread(pColorTable,sizeof(RGBQUAD),256,fp); 55

56

} 57

58

//申请位图数据所需要的空间,读位图数据进内存

59

60

pBmpBuf=new unsigned char[lineByte * bmpHeight]; 61

62

fread(pBmpBuf,1,lineByte * bmpHeight,fp); 63

64

fclose(fp);//关闭文件

65

66

return 1;//读取文件成功 67 } 68

69 //--------------------------- 70 //给定一个图像位图数据、宽、高、颜色表指针及每像素所占的位数等信息,将其写到指定文件中

71 boolsaveBmp(char *bmpName, unsigned char *imgBuf, int width, int height, intbiBitCount, RGBQUAD *pColorTable) 72 { 73 74

//如果位图数据指针为0,则没有数据传入,函数返回

75

76

if(!imgBuf) 77

return 0; 78

79

//颜色表大小,以字节为单位,灰度图像颜色表为1024字节,彩色图像颜色表大小为0 80

81

intcolorTablesize=0; 82

83

if(biBitCount==8) 84

colorTablesize=1024; 85

86

//待存储图像数据每行字节数为4的倍数

87

88

intlineByte=(width * biBitCount/8+3)/4*4; 89

90

//以二进制写的方式打开文件

91

92

FILE *fp=fopen(bmpName,"wb"); 93

94

if(fp==0) 95

return 0; 96

97

//申请位图文件头结构变量,填写文件头信息

98

99

BITMAPFILEHEADER fileHead; 100

101

fileHead.bfType = 0x4D42;//bmp类型 102

103

//bfSize是图像文件4个组成部分之和 104

105

fileHead.bfSize= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + colorTablesize + lineByte*height; 106

107

fileHead.bfReserved1 = 0; 108

109

fileHead.bfReserved2 = 0; 110

111

//bfOffBits是图像文件前3个部分所需空间之和 112

113

fileHead.bfOffBits=54+colorTablesize; 114

115

//写文件头进文件 116

117

fwrite(&fileHead, sizeof(BITMAPFILEHEADER),1, fp); 118

119

//申请位图信息头结构变量,填写信息头信息 120

121

BITMAPINFOHEADER head; 122

123

head.biBitCount=biBitCount; 124 125

head.biClrImportant=0; 126

127

head.biClrUsed=0; 128

129

head.biCompression=0; 130

131

head.biHeight=height; 132

133

head.biPlanes=1; 134

135

head.biSize=40; 136

137

head.biSizeImage=lineByte*height; 138

139

head.biWidth=width; 140

141

head.biXPelsPerMeter=0; 142

143

head.biYPelsPerMeter=0; 144

145

//写位图信息头进内存 146

147

fwrite(&head, sizeof(BITMAPINFOHEADER),1, fp); 148

149

//如果灰度图像,有颜色表,写入文件 150

151

if(biBitCount==8) 152

fwrite(pColorTable, sizeof(RGBQUAD),256, fp); 153

154

//写位图数据进文件 155

156

fwrite(imgBuf, height*lineByte, 1, fp); 157

158

//关闭文件 159

160

fclose(fp); 161

162

return 1; 163 164 } 165

166 //-------------------------- 167 //以下为像素的读取函数 168 void doIt() 169 { 170

171

//读入指定BMP文件进内存 172

173

char readPath[]="nv.BMP"; 174

175

readBmp(readPath); 176

177

//输出图像的信息 178 179

cout<<"width="<

195

if(biBitCount==8) //对于灰度图像 196

{

197

//---------------------- 198

//以下完成图像的分割成8*8小单元,并把像素值存储到指定文本中。由于BMP图像的像素数据是从

199

//左下角:由左往右,由上往下逐行扫描的 200

int L1=0; 201

int hang=63; 202

int lie=0; 203

//int L2=0; 204

//intfen_ge=8; 205

for(intfen_ge_hang=0;fen_ge_hang<8;fen_ge_hang++)//64*64矩阵行循环 206

{

207

for(intfen_ge_lie=0;fen_ge_lie<8;fen_ge_lie++)//64*64列矩阵循环 208

{

209

//------------- 210

for(L1=hang;L1>hang-8;L1--)//8*8矩阵行 211

{ 212

for(int L2=lie;L2

{ 214

m=*(pBmpBuf+L1*lineByte+L2); 215

outfile<

count_xiang_su++; 217

if(count_xiang_su%8==0)//每8*8矩阵读入文本文件 218

{ 219

outfile<

} 221

} 222

} 223

//-------------- 224

hang=63-fen_ge_hang*8;//64*64矩阵行变换 225

lie+=8;//64*64矩阵列变换

226

//该一行(64)由8个8*8矩阵的行组成 227

} 228

hang-=8;//64*64矩阵的列变换 229

lie=0;//64*64juzhen 230

} 231

} 232

233

//double xiang_su[2048]; 234

//ofstreamoutfile("xiang_su_zhi.txt",ios::in|ios::trunc); 235

if(!outfile) 236

{ 237

cout<<"open error!"<

exit(1); 239

} 240

else if(biBitCount==24) 241

{//彩色图像

242

for(inti=0;i

{ 244

for(int j=0;j

{ 246

for(int k=0;k<3;k++)//每像素RGB三个分量分别置0才变成黑色 247

{ 248

//*(pBmpBuf+i*lineByte+j*3+k)-=40; 249

m=*(pBmpBuf+i*lineByte+j*3+k); 250

outfile<

count_xiang_su++; 252

if(count_xiang_su%8==0) 253

{ 254

outfile<

} 256

//n++; 257

} 258

n++; 259

} 260 261

262

} 263

cout<<"总的像素个素为:"<

cout<<"---------------------"<

} 266

267

//将图像数据存盘 268

269

char writePath[]="nvcpy.BMP";//图片处理后再存储 270

271

saveBmp(writePath, pBmpBuf, bmpWidth, bmpHeight, biBitCount, pColorTable); 272

273

//清除缓冲区,pBmpBuf和pColorTable是全局变量,在文件读入时申请的空间 274

275

delete []pBmpBuf; 276

277

if(biBitCount==8) 278

delete []pColorTable; 279 } 280

281 void main() 282 { 283

doIt();

上一篇:统编版六年级语文上下一篇:托班下学期工作总结