第2、3讲 图像的存储格式

本图像处理系列笔记是基于B站杨淑莹老师的课程进行学习整理的。

文章目录

  • 黑白图像
  • 8位灰度索引图像
  • 8位伪彩色索引图像
  • 24位真彩色图像
  • 图像文件格式
  • BMP文件存储格式
    • BMP文件头
    • 位图信息头
    • 颜色表
    • 位图信息——BITMAPINFO结构
    • BMP位图文件汇总

按照颜色深度分类,常用图像文件:

  • 黑白图像
  • 8位索引图像
  • 24位真彩色图像

黑白图像

单色图像,二值图像,每个像素由0 或 1 组成

8位灰度索引图像

一个数据矩阵 X 和一个调色板矩阵 MAP

X=[015020012050180250220100](1)X=\left[ \begin{matrix} 0 & 150 & 200 \\ 120 & 50 & 180 \\ 250 & 220 & 100 \end{matrix} \tag{1}\right] X=012025015050220200180100(1)

调色板MAP:

索引号BGR
0000
1111
2222
255255255255

即图像的数据矩阵中,每一个元素的值即为索引号的值,其图像颜色表代表了BGR的分量各是多少。8位灰度索引图像中,索引号的值和RGB分量的值相同。

各像素信息由一个量化的灰度级来描述,没有彩色信息。其像素值越大,图像越亮。

8位伪彩色索引图像

每个像素的信息由RGB三原色构成的图像,其中RGB是由不同的灰度级来描述的。

  • 颜色表R G B分量值不全相等。
  • 像素值是图像颜色表的索引地址

颜色索引表

索引号RGB
25500
绿02550
00255
255255255
000
0255255
2550255
2552550

24位真彩色图像

  • 每一像素由RGB三个分量组成
  • 每个分量各占8位,取值范围为0~255,每个像素24位。

表示如下:

(207,137,130)(220,179,163)(215,169,161)…

以三个分量的形式可表示如下:
R=[25524024025508025500](2)R=\left[ \begin{matrix} 255 & 240 & 240 \\ 255 & 0 & 80 \\ 255 & 0 & 0 \end{matrix} \tag{2}\right] R=25525525524000240800(2)
G=[01608025525516002550](3)G=\left[ \begin{matrix} 0 & 160 & 80 \\ 255 & 255 & 160 \\ 0 & 255 & 0 \end{matrix} \tag{3}\right] G=02550160255255801600(3)
B=[08016000240255255255](4)B=\left[ \begin{matrix} 0 & 80 & 160 \\ 0& 0 & 240 \\ 255 & 255 & 255 \end{matrix} \tag{4}\right] B=00255800255160240255(4)

图像文件格式

  • BMP格式
  • GIF格式
    • 主要用于不同平台上交流和传输,而不是作为文件的存储格式,最大不能超过64M,颜色最多为256色。
  • TIFF格式
    • 其考虑了扩展性、方便性和可修改性,是最复杂的一种,要求用更多的代码来控制它,结果导致文件读写速度慢,代码长
  • JPEG格式

BMP文件存储格式

BMP文件组成

  • BMP文件头
  • 位图信息头
  • 颜色表
  • 位图数据

BMP文件头

在这里插入图片描述
bfType表示文件类型,bfSize表示文件大小,bfOffBits表示位图数据的起始位置

位图信息头

在这里插入图片描述
biSize表示该结构共多少个字节,即从biSize到biClrImportant共40个字节,故biSize为40
biWidth和biHeight为图像的宽度和高度,以像素为单位
biPlanes是位平面数,一般是1
biBitCount是每个像素所需的位数,8位伪彩色图像,8位灰度图像,biBitCount为8(8位带颜色表),24位伪彩色图像,biBitCount为24(24位不带颜色表
biCompression为位图压缩类型,BMP图像不压缩,此处为0
biSizeImage为位图的大小,以字节为单位,整个位图的大小
最后四个标准情况下为0

颜色表

在这里插入图片描述
除了红绿蓝三个分量,还有一个保留的字节,rgbReserved

位图信息——BITMAPINFO结构

在这里插入图片描述

BMP位图文件汇总

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu18.04.4 环境下对属性加密算法CP-ABE环境搭建

注意事项 cpabe依赖pbc,pbc依赖gmp,gmp依赖M4、bison、flex如果权限不够 ,命令的前面加上sudo ,不要直接使用root用户进行操作,其带来的隐患有很多 第一步 配置简单的环境 简单环境 包括gcc、g、make、cmake、openss…

C语言 函数指针 int(*ptr)(int,int)

基本介绍 函数指针:指向函数的指针 与数组类似 定义 Int(*pmax)(int ,int)max; Int(*pmax)(int x,int y)max;//形参名称不重要 函数返回类型(*指针)(形参类型)函数名称; 具体案例 代码: *pmax取到函数本身 调用函数指针方式: (*pmax)(x,y); pmax(x,y);//与java中调用函数一…

C++ primer 第14章 操作重载与类型转换

文章目录基本概念直接调用一个重载的运算符函数某些运算符不应该被重载使用与内置类型一致的含义选择作为成员或者非成员输入和输出运算符重载输出运算符<<输出运算符尽量减少格式化操作输入输出运算符必须是非成员函数重载输入运算符>>算术和关系运算符相等运算符…

C语言 回调函数 produce(arr,len,getRand)

基本介绍 回调函数:形参中包含另一个函数的函数指针 用函数指针接收另一个函数 案例 代码解析 具体代码 #include<stdio.h> #include<stdlib.h> //回调函数--//函数原型 int getRand(); int *produce(int*arr,int len,int(*get)()); int main() {int arr[10…

从零开始配置服务器密码机的开发环境

开发环境环境配置安装gcc编译器安装g编译器安装make安装cmake安装ssh安装git和配置安装大文件管理工具git-lfs安装数据库sqlite3安装数据库sqlite_orm文件安装Openssl安装Tcl和Tk安装tcl-expect-dev安装boost安装clang-format安装Clion注意事项安装automake和libudev-dev环境配…

C语言 动态内存分配机制(堆区) int*p=malloc(5*sizeof(4))

C程序内存分配图 栈区:局部变量 堆区:动态分配的数据 静态存储区/全局区:全局变量,静态数据 代码区:代码,指令 内存分配说明 内存动态分配的相关函数 堆区: #inlcude<stdlib.h> Malloc(size);//分配长度为size个字节的连续空间 Calloc(n,size);//分配size个长度为n…

C++ primer 第15章 面向对象程序设计

文章目录前言OOP&#xff1a;概述继承动态绑定定义基类和派生类定义基类成员函数与继承访问控制与继承定义派生类派生类中的虚函数派生类对象及派生类向基类的类型转换派生类构造函数派生类使用基类的成员继承与静态成员派生类的声明被用作基类的类防止继承的发生类型转换与继承…

服务器密码机部分文件的介绍学习

相关文件包 automake,autoconf使用详解

C语言 结构体 struct Cat cat1;

引入 使用传统技术解决 需要定义多个变量或数组 结构体与结构体变量的关系示意图 类似Java类中的对象(结构体)与属性(结构体变量) 一切物体都可以看作对象(结构体) 补充:C语言数据类型 简单使用案例 代码 Cat是我们自己定义的数据类型 struct Cat cat1;//创建struct Cat的…

boost Filesystem Library Version 3关于文件的一些函数封装 fsync()函数

boost boost Filesystem Library Version 3boost::filesystem使用方法,根据路径创建文件夹使用boost.filesystem检查文件是否存在的正确方式std::filesystem::temp_directory_path关于C#:与boost :: filesystem :: unique_path()等效的C 17是什么?C++ 檔案、資料夾、路徑處理…

c++面向对象高级编程 总目录

本文是对学习侯捷视频 c面向对象高级编程系列博客的目录总索引。 c面向对象高级编程 学习一 不带指针的类&#xff1a; 访问私有成员变量的方式&#xff0c;内联inline&#xff0c;常量成员函数&#xff0c;构造函数&#xff0c;值传递&#xff0c;引用传递&#xff0c;操作符…

C语言 共用体/联合体 union

引入 传统技术的缺陷—结构体 共用体基本介绍 共用体与结构体一样都是值传递 定义共用体的三种方式 内存布局 共用体数据空间占用最大的成员的数据空间大小 案例解析 1) 2) 3) 4) 注: 1010 1101 0101 0100所对应的十进制是负数 计算机中的二进制都是以补码存储的,所…

C++ Makefile文件详解

什么是Makefile文件 一个工程&#xff0c;源文件不计其数&#xff0c;按照类型、功能、模块分别放在对应的若干个目录中Makefile定义了一系列的规则&#xff0c;比如定义文件编译的先后顺序。类似shell脚本&#xff0c;也可以执行操作系统的命令Makefile带来的好处是自动化编译…

C语言 项目练习-家庭收支软件

目标 需求说明 界面说明 登记收入界面: 登记支出界面 收支明细界面 退出界面 项目代码改进要求 自己完成的代码 版本1 #include<stdio.h> #include<string.h> void choose(int button,int i); //项目--家庭收支软件 static double total10000;//总金额 #de…

c++ fmt 库安装和使用示例、clion配置

安装 git clone https://github.com/fmtlib/fmt.gitmake .mkae && make install CLion使用 使用和安装存在出入下载源码&#xff0c;可以先 clone 到你的项目中去&#xff0c;https://github.com/fmtlib/fmt &#xff0c;我放到的是项目的 dependencies 目录然后在…

C语言 项目 CRM系统(客户信息管理系统)

项目目标 项目需求说明 系统界面 1)添加客户界面 通过编号来区分客户 2)删除客户界面 对用户输入的编号进行核查,存在与否,合法与否 3)显示客户列表界面 4)修改客户信息的界面 项目设计 Customer结构体的设计 CRM系统结构框架图 案例代码 #include <stdio.h>…

代码重构 防火墙 相关知识

参考 依据Linux命令以及sysconf下现有的iptables命令&#xff0c;详见hsm_sysconf_server/src/sysconf_server.cpp中的firewall规则。 接口名称 firewall_manager 目的(现实) 根据网口直连获取当前eth0和eth1的各种信息保证设置的正确性 以及要针对管理口和服务口设计不…

C语言 文件的基本介绍

基本介绍 输入流与输出流 重点在C程序(内存)的数据移动方向 对于C程序(内存) 输入数据:输入流 输出数据:输出流 输入 和输出 C标准库 标准输入输出库 标准文件 getchar()&putchar()函数 代码 #include<stdio.h> #include<stdlib.h> //文件--getchar()和…

ubuntu修改字体 样式

使用 快捷键 ctrlaltt 打开终端安装gnome-tweaks桌面管理工具 sudo apt install gnome-tweaksaltf2 在运行窗口输入 gnome-tweaks 命令&#xff0c;然后回车打开优化窗口&#xff0c;选择第二个front字体选项ubuntu显示中文

C语言 文件的读写

引入 OS操作系统 打开文件fopen()函数 读写模式: r:读取已有文件 w:文件不存在,创建文件并写入文件.文件存在,内容清零,再写入文件 a: 文件不存在,创建文件并写入文件.文件存在,以追加的形式写入文件 r:读写已有文件 w:文件不存在,创建文件并读写文件.文件存在,内容清零,再…