《数字图像处理基础》学习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; // 保留字,一般设为标准值0
     WORD bfReserved; // 保留字,一般设为标准值0
     DWORD bfOffBits;// 位图数据的起始位置(位图数据距文件头的偏移量)
    }BITMAPFILEHEADER;
                         
  2. 位图信息头

     
    typedef struct tagBITMAPINFOHEADER
    {
      DWORD biSize; // 本结构大小的字节数 
      LONG biWidth; // 图像的宽,单位为像素点 
      LONG biHeight;// 图像的高,单位为像素点
      WORD biPlanes; // 位平面数,一般设为标准值1即可 
      WORD biBitCount;// 每个像素所需的位数,单色位图一个像素占一位,灰度图和伪彩色图8位,真彩色24位 
      DWORD biCompression; // 位图压缩类型,对于bmp来说,一般不压缩,设为标准值0
      DWORD 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. 从绿色开始:绿青,谐音,滤清。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/894884.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【动手学深度学习】8.2. 文本预处理(个人向笔记)

本节将解析文本的常见预处理步骤包括:将文本作为字符串加载到内存中。将字符串拆分为词元(如单词和字符)。建立一个词表,将拆分的词元映射到数字索引。将文本转换为数字索引序列,方便模型操作。 1. 读取数据集 我们下…

C++中的vector介绍(常用函数)

目录 vector的介绍及使用1.vector的介绍2.vector的使用2.1vector的定义2.2 vector iterator 的使用2.3vector 空间增长问题2.4 vector 增删查改2.5 vector 迭代器失效问题。(重点) 3.动态二维数组理解4.模拟实现reserve vector的介绍及使用 1.vector的介…

基于SpringBoot的“社区医院管理服务系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“社区医院管理服务系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 用户注册界面图 医生界面…

基于x86_64汇编语言简单教程1: 环境预备与尝试

目录 前言 环境配置 基本硬件与操作系统要求 WSL VSCode基本配置(For Windows) 安装基本的依赖 为您的VSCode安装插件: 学习要求 入门 先试试味道 前言 笔者最近正在梭哈使用NASM汇编器的x86 32位汇编,笔者这里记录一下一个晚上的成果。 环境…

chrome清除https状态

莫名其妙的http跳转到https的url了。 解决办法 浏览器地址栏输入:chrome://net-internals/#hsts 输入你需要删除的域名即可!!!

工业级三防平板在工厂极端环境下保障稳定运行

在现代工业环境中,尤其是在工厂车间,设备和技术的稳定性直接关系到生产效率与产品质量。然而,极端的工作条件常常给电子设备的使用带来了不小的挑战。为此,市场上出现了一种专为工业应用设计大尺寸手持三防平板电脑。这种设备以其…

大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

空开老化损坏更换

如果预算充足,空开电流选择比常用工况多30%最佳,太大也没必要。 设备 空开一般质保一年到三年。 现象 这个空开用了三年多,最近跳闸越来越频繁。 这是相关人员安装的充分落实减负增效,工况和空开最大功率相一致,三年…

java基于SpringBoot+Vue+uniapp微信小程序的自助点餐系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

使用短效IP池的优势是什么?

短效IP池作为代理IP服务中一种独特的资源管理方式,其应用已经在数据采集、市场分析和网络安全等多个领域中展示出强大的功能。尽管“短效”听起来似乎意味着某种限制,然而在某些特定的应用场景下,短效IP池却提供了无可比拟的优势。本文将详细…

Linux:Linux中第一个小程序_进度条

前言: 在日常生活中,我们下载软件,文件,都会都一个进度显示,来告知我们的下载进度,接下来我们可以自己手搓一个进度条,在我们自己写扫雷、贪吃蛇等小游戏时,可以做一个游戏加载进度使…

【Hive】6-Hive函数、运算符使用

Hive函数、运算符使用 Hive内置运算符 概述 整体上,Hive支持的运算符可以分为三大类:关系运算、算术运算、逻辑运算。 官方参考文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManualUDF 也可以使用下述方式查看运算符的…

数控机械制造工厂ERP适用范围有哪些

在当今制造业高速发展的背景下,企业资源计划(ERP)系统已成为提升工厂管理效率、实现生产自动化与信息化的关键工具。特别是对于数控机械制造工厂而言,一个合适的ERP系统能够帮助其优化生产流程、提高产品质量、降低生产成本并增强市场竞争力。 1. 生产计…

Windows上安装Go并配置环境变量(图文步骤)

前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量; Go语言版本:1.23.2 Windows版本:win11(win10通用) 下载Go环境 下载go环境:Go下载官网链接(https://golang.google.cn/dl/) 等待…

Dokcer如何容器部署及常见问题

本文讲解通过Docker部署Jenkins过程及遇到的问题。 通过 Docker 部署 Jenkins 使用 Docker 来部署 Jenkins 是一个快速且高效的方式。以下是使用 Docker 部署 Jenkins 的分步骤指南: 1. 安装 Docker 如果你的系统上还没有安装 Docker,请根据操作系统…

VScode实现服务器免密登录(亲测有效)

目录 1 免密步骤1.1 在本地生成密钥1.2 在vscode中下载Remote-SSH1.3 配置SSH文件1.4 在服务器中添加本地公开密钥1.5 远程免密连接试验 2 后记 1 免密步骤 1.1 在本地生成密钥 window R打开命令面板 ssh-keygen1.2 在vscode中下载Remote-SSH 1.3 配置SSH文件 本地密钥的文…

快速查看平台信息脚本(完善中...)

前言: 在熟悉一个平台时,我们经常要去了解这个平台的一些信息,例如架构、CPU核心情况、线程数、用户、内存、磁盘等信息,所以我将这些命令汇总成脚本~方便查看。后面会持续更新,尽量从兼容以及实用地角度修改脚本.....…

JUC并发编程进阶2:CompletableFuture

1 Future接口理论知识复习 Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等 举例:比如主线程让一个子线程去执行任务…

基于SpringBoot+Vue+uniapp微信小程序的澡堂预订的微信小程序的详细设计和实现

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

Java项目实战II基于Spring Boot的毕业就业信息管理系统设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着高校扩…