当前位置: 首页 > news >正文

《数字图像处理基础》学习02-BMP位图文件

目录

一,BMP文件组成 

二,使用ultra edit软件查看图像结构

1,ultra edit软件的下载和安装 

2,ultra edit打开图像 

 三,使用matlab显示RGB图像


 

 在之前的文章学习到,计算机只能处理数字图像,因此,这篇文章我接着学习数字图像的位图文件结构。

一,BMP文件组成 

 BMP文件由四部分组成:

  1. 位图文件头

    所存的内容如下:
    typedef struct tagBITMAPFILEHEADER
    {WORD bfType; // 字节 'BM'DWORD bfSize; // 文件大小,表示文件的总字节数WORD bfReserved; // 保留字,一般设为标准值0WORD bfReserved; // 保留字,一般设为标准值0DWORD bfOffBits;// 位图数据的起始位置(位图数据距文件头的偏移量)
    }BITMAPFILEHEADER;
                         
  2. 位图信息头

     
    typedef struct tagBITMAPINFOHEADER
    {DWORD biSize; // 本结构大小的字节数 LONG biWidth; // 图像的宽,单位为像素点 LONG biHeight;// 图像的高,单位为像素点WORD biPlanes; // 位平面数,一般设为标准值1即可 WORD biBitCount;// 每个像素所需的位数,单色位图一个像素占一位,灰度图和伪彩色图8位,真彩色24位 DWORD biCompression; // 位图压缩类型,对于bmp来说,一般不压缩,设为标准值0DWORD biSizeImage; // 位图大小,以字节为单位 LONG biXPelsPerMeter; // 指定目标设备的水平分辨率。设为标准值0 LONG biYPelsPerMeter;// 指定目标设备的垂直分辨率。设为标准值0 DWORD biClrUsed; //颜色数。设为标准值0 DWORD biClrImportant;// 重要的颜色数。设为标准值0
    }BITMAPINFOHEADER;

     
  3. 调色板
     
    typedef struct tagRGBQUAD
    {BYTE rgbBlue; // 蓝色 BYTE rgbGreen; // 绿色 BYTE rgbRed;  // 红色 BYTE rgbReserved;  // 保留的字节,设为标准值0 
    }RGBQUAD;
  4. 位图数据
     
    typedef struct tagBITMAPINFO
    {BITMAPINFOHEEADER bmiHeader;RGBQUAD bmicolors[1]; // 颜色表 
    }BITMAPINFO;

    如果有颜色表的话,数据值就是颜色表的索引号。

小知识:word类型占2个字节,dword(double word)类型占4个字节,long类型占4个字节。 

之所以要了解BMP文件的组成结构,不仅是因为在软件开发上,要用这几个变量存储位图数据,而且也是为了能够分析图像的数据。

接下来就开始分析图像的数据。 

位图文件常见的格式有:

  1. jpeg(或 jpg):全称 joint photographic experts group  联合图像专家组
  2. gif:全称 graphics interchange format  图像互换格式



    可以看到,gif 格式常用于表情包、视频截取。
  3. bmp:全称 bit map  位图 
  4. tiff:全称 tag image format file  标签图像文件格式

二,使用ultra edit软件查看图像结构

 在处理图像时,或多或少会用到一个软件:ultra edit。因为ultra  edit 软件可以将打开的文件所对应的ASCII码输出,很大程度上有助于分析图像的数据。 软件下载及安装如下↓

1,ultra edit软件的下载和安装 

对应软件到夸克网盘链接下载:https://pan.quark.cn/s/de62f2f5b1f6

下载之后是个压缩包,

将压缩文件剪切到空间比较大的磁盘(或者是解压到习惯将软件下载的盘符下)并创建一个有“ultra edit”这两个关键字的文件夹名,之后在创建的文件夹里面解压压缩包。

 之后两步走:

  1. 运行exe可执行文件,没什么注意的,就是软件的安装路径需要需改,以及最后不要勾选任何选项。
  2. 之后,使用管理员身份运行bat文件,如果显示如下信息:
    The customized UE directory is F:\APP\UE_27_x64\The environment is initialized !已复制         1 个文件。*********************** Step A rps_UE has been done ! ************************Item A has been added !Item B has been added !*********************** Step B has been done ! ***********************IP1 has been added!IP2 has been added!IP3 has been added!IP4 has been added!IP5 has been added!Strategy has been applied !*********************** Step C has been done ! ***********************----------------------- 注册环境成功!请按任意键退出!------------------------

    则表示ultra edit软件安装成功。接着打开ultra edit软件并打开图像查看图像数据信息👇

2,ultra edit打开图像 

 之后就会输出如下信息 (图像文件的数据分布情况)↓ 

可以看到,包含内容的图像文件数据很多,因此,建议用画笔软件新建一张只有一个像素的24位位图(一个像素的位图用ultra edit软件打开只看到文件头部分),打开画笔软件👉

接着鼠标左键点击“文件”→选择“属性”,如右图所示

 在弹出的界面里面修改宽和高,都设置为1,表示图像的大小只有1×1。

修改之后保存成24位位图的格式 

 最后再用ultra edit软件打开只有一个像素的24位位图,显示的数据如下

结合之前的位图文件头结构:

  1. 前两个字节是字节‘BM’,
  2. 后四个字节是整个文件大小,
  3. 接着后四个字节是保留字,
  4. 最后四个字节是偏移量

 

其中需要注意的有两个地方:

  1. 3A 00 00 00:这四个字节是整个文件(或数据区)的大小,由于是从低位到高位排列(低位在前,高位在后),因此需要将“3A 00 00 00”倒过来写,变成“00 00 00 3A ”
  2. 36 00 00 00:位图数据距文件头的偏移量,和文件大小一样,也是从低位到高位排列(低位在前,高位在后),因此需要将“36 00 00 00”倒过来写,变成“00 00 00 36 ”​​​​​​。

之后的40个字节就是BITMAPINFOHEADER的结构:

 三,使用matlab显示RGB图像

 如果没有下载matlab软件,请点击如下链接去下载

matlab软件下载安装及修改项目工作目录_matlab解压密码用于所有压缩文件中-CSDN博客

需要注意的是,读取的图像要放置在代码文件对应的目录下,例如,我的代码文件text1.m所使用的编辑器的工作路径在“D:\myMatlab”下,因此,将图像复制或者是剪切到“D:\myMatlab”目录下:

 更方便的方法是添加图像文件夹到编辑器的搜索路径中  ↓

 如上操作之后,即使图像和代码文件不在同一个文件夹,编辑器也可以搜索到图像文件。

% 清空工作区
clear ;
clc; 
close all;
t=imread("lena_color_256.tif");
g=im2gray(t);
set(0,"defaultFigureColor",[0 1 1]);
set(0,"defaultFigurePosition",[100,100,1000,500]);
subplot(121);imshow(t);
subplot(122);imshow(g);

 代码注解:

clear ; %清空工作空间的变量
clc;    %清屏
close all;  % 关闭当前所有图形窗口
t=imread("lena_color_256.tif"); %imread函数读取图像
g=im2gray(t);  %im2gray函数将rgb图像转换成灰度图像
set(0,"defaultFigureColor",[0 1 1]);  %图形窗口的背景颜色(青色)
set(0,"defaultFigurePosition",[100,100,1000,500]); % 图形窗口的位置和大小
subplot(121);imshow(t); % subplot函数用于显示多个图形窗口:121表示总共有一行两列,该图形窗口显示在第一列
%imshow函数显示图像,显示的是读取的rgb图像

其中:

set(0,"defaultFigureColor",[0 1 1]);  %图形窗口的背景颜色(青色)

图形窗口的背景颜色可以有8个组合 ↓  (将表中的255替换成1就是图形窗口的背景色) 

                                                  

                                                      8位伪彩色的颜色索引表

 我的记忆方法是利用谐音法:

  1. 三原色:rgb,红绿蓝,谐音,红绿灯。
  2. 从红色开始:红黄紫白,谐音,红花纸白。
  3. 蓝色:就只有G值有255值。
  4. 从绿色开始:绿青,谐音,滤清。

有问题请在评论区留言或者是私信我,回复时间不超过一天。 

相关文章:

《数字图像处理基础》学习02-BMP位图文件

目录 一,BMP文件组成 二,使用ultra edit软件查看图像结构 1,ultra edit软件的下载和安装 2,ultra edit打开图像 三,使用matlab显示RGB图像 在之前的文章学习到,计算机只能处理数字图像,因…...

车辆管理系统设计与SpringBoot技术融合

3系统分析 3.1可行性分析 通过对本车辆管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本车辆管理系统采用Spring Boot框架,JAVA作为开发语…...

常见TCP/IP协议基础——计算机网络

目录 前言常见协议基础常见协议-基于TCP的应用层协议常见协议-基于UDP的应用层协议常见协议-网络层协议习题自测1.邮件发送协议2.接收邮件协议端口3.建立连接4.层次对应关系5.FTP服务器端口 前言 本笔记为备考软件设计师时的重点知识点笔记,关于常见TCP/IP协议基础…...

SVM支持向量机python实现

支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,主要用于分类和回归任务。SVM的核心思想是找到一个最优的超平面,使得不同类别的数据点能够被尽可能清晰地分开,并且这个超平面与最近的数据点之间有…...

linux查看系统类型

要确定系统是 Ubuntu 还是 CentOS,可以通过查看系统的发行版信息来判断。以下是几种常见的方法: 方法一:使用 cat 命令查看 /etc/os-release 文件 这个文件包含了系统的详细信息,包括发行版名称和版本号。 cat /etc/os-release…...

SpringSecurity 捕获自定义JWT过滤器抛出的异常

自定义过滤器如下: /*** jwt过滤器,验证令牌是否合法** author 朱铭健*/ Slf4j public class JwtAuthenticationFilter extends OncePerRequestFilter {Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse resp…...

中小型企业网络的设计与实现

资料下载中小型企业网络的设计与实现论文资源-CSDN文库 摘 要 本文规划的是一个公司的网络搭建,网络设计包括了多个部门的网络架构,每个部门通过VLAN进行隔离,确保了网络的安全性和高效。 华为企业网络模拟平台(ENSP&#xff09…...

小马识途海外媒体推广有何优势?

互联网让地球变得像一个村子一样,信息可以瞬间变得人尽皆知,商品和服务也同样习惯了跨国合作。中国不少物美价廉的产品在世界各地都很受欢迎,国内小资群体对国外的服饰和美妆更是偏爱有加。小马识途营销顾问认为,中国品牌不出走国…...

Spring Boot知识管理:跨平台集成方案

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...

逆向工程基本流程

1 逆向的基本流程 1获取目标app (官网,豌豆荚),尽量不要去华为应用市场,小米应用市场下载–多渠道打包,安装到手机上 2使用抓包工具 抓包分析(charles,fiddler…) 3使用反编译工具 (JADX,JD-GUI。。),把apk反编译成java代码,分析java代码,定位代码位置 4 使用动态分…...

target_include_directories是如何组织头文件的?

target_include_directories(mylib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) 这条 CMake 命令用于指定编译目标(在此例中为 mylib 静态库)的头文件搜索路径。具体来说,这条命令的作用包括以下几个方面: 1. 添加包含目录 mylib&…...

【Flutter】Dart:运算符

在 Dart 中,运算符是非常重要的组成部分,它们可以对变量和常量进行多种运算操作。理解和掌握 Dart 中的各种运算符不仅可以帮助你编写更加高效、简洁的代码,还能更好地理解其背后的逻辑和设计。本文将深入探讨 Dart 中的运算符,包…...

ChatGPT01-preivew体验报告:内置思维链和多个llm组合出的COT有啥区别呢?丹田与练气+中学生物理奥赛题测试,名不虚传还是名副其实?

一个月前,o1发布的时候,我写了篇文章介绍 逻辑推理能力堪比博士生,OpenAI发布全新AI模型系列: o1 - 大模型或许进入新阶段,还翻译了官方的介绍 解密OpenAI o1是如何让LLMs获得逻辑推理能力的 - CoT * RL,也…...

《云计算网络技术与应用》实训6-1:配置KVM虚拟机使用NAT网络

任务1、计算节点基础环境准备 1. 使用VMware安装CentOS 7虚拟机,安装时记得开启CPU虚拟化,命名为“KVMC6”。 2. (网卡配置和之前的一样,都用100网段)网关设置为192.168.100.1,地址段为192.168.100.10-25…...

【Unity新闻】Unity 6 正式版发布

Unity CEO Matt Bromberg 在今天自豪地宣布,Unity 6 正式发布!作为迄今为止最强大和稳定的版本,Unity 6 为游戏和应用开发者提供了大量的新功能和工具,帮助他们加速开发并提升性能。 本次正式版是6.0000.0.23f1(LTS&a…...

基于语音识别的停车共享小程序(lw+演示+源码+运行)

目 录 1 绪论1 1.1 课题研究背景1 1.2 研究现状1 1.3 论文结构安排1 2 系统关键技术2 2.1 微信小程序2 2.2 微信Web开发者工具2 2.3 JavaScript简介2 2.4 微信小程序API接口2 2.5 MYSQL数据库2 3 系统分析1 3.1 可行性分析1 3.1.1 技术可行性1 3.1.2 经济可行性1…...

编程考古-计算机发展(上)

计算机/器现在是我们日常生活中的重要工具,它的发展历程见证了人类数学计算能力的不断提升。 什么是计算 计算的本质在于基于规则对符号串进行变换。简言之,从一个初始的符号串(输入)出发,依据既定的法则逐步改变这个…...

pc轨迹回放制作

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:pc轨迹回放制作 主要内容:制作车辆轨迹操作页,包括查询条件、动态轨迹回放、车辆轨迹详情表单等 应用场景:车辆…...

无向图中的一些问题与处理(上接无向图知识简记)

一、有向图中的排序与调度 1、深度优先搜索的排序 使用深度优先搜索对图中顶点进行排序,根据数据结构性质与递归保存顺序,有以下三种排列顺序 (1) 前序:在递归调用之前将顶点加入队列。 (2)后…...

AIGC助力小学生编程梦:C++入门不再难!

文章目录 一、AIGC时代下的编程教育新趋势二、小学生C入门趣味编程的意义三、小学生C入门趣味编程的实践策略四、面临的挑战与应对策略五、AIGC技术在小学生C编程中的应用与前景《小学生C趣味编程从入门到精通》编辑推荐内容简介作者简介目录 随着人工智能生成内容(…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...