当前位置: 首页 > 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趣味编程从入门到精通》编辑推荐内容简介作者简介目录 随着人工智能生成内容(…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...