图像格式基础

        所谓位映像,即是指一个二维的像素矩阵,而位图就是采用位映像方法显示和存储图像。一幅图像的显示就是将图像的像素映射到屏幕的像素上并显示一定的颜色。当一幅图形的像素由彩色表示时就是我们通常所说的彩色图像了。
        由于数字图像可以表示为矩阵的形式,所以在计算机数字图像处理程序中,通常用二维数组来存放图像数据。二维数组的行对应图像的高,二维数组的列对应图像的宽,二维数组的元素对应图像的像素,二维数组元素的值就是像素的灰度值。采用二维数组来存储数字图像,符合二维图像的行列特性,同时也便于程序的寻址操作,使得计算机图像编程十分方便.
        图像的问题数据是一个二维数组(矩阵),矩阵的每一个元素对应了图像的一个像素,当保存一幅图像时,不但要保存图像的位图数据矩阵,还要将每个像素的颜色保存下来,颜色的记录是利用颜色表来完成的。
        颜色表,也叫颜色查找表,是图像像素数据的颜色索引表。对于真彩色图像,每个像素占存储空间3个字节(24位),分别对应R, G, B三个分量,每个像素的值已经将该像素的颜色记录下来了,不再需要颜色表,因此24位真彩色位图没有颜色表。
        彩色图像可以由RGB彩色空间表示。彩色空间是用来表示彩色的数学模型,又被称为彩色模型。计算计算上显示的图像经常有二值图像、灰度图像、伪彩色图像及真彩色图像等不同格式类型。而灰度和彩色格式是数字图像处理中最常用到的类型。
        灰度图像是数字图像的最基本形式,灰度图像可以由黑白照片数字化得到,或从彩色图像进行去色处理得到。灰度图像只表达图像的亮度信息而没有彩色信息,因此,灰度图像的每个像素点上只包含一个量化的灰度级(即灰度值),用来表示该点的亮度水平,并且通常用1个字节(8个二进制位)来存储灰度值。  
        彩色图像数据不仅包含亮度信息,还包含颜色信息。BMP文件结构及其存取:数字图像在外存储器设备中的存储形式是图像文件,图像必须按照某个已知的、公认的数据存储顺序和结构进行存储,才能使不同的程序对图像文件顺利进行打开或存盘操作,实现数据共享。
        图像数据子文件中的存储顺序和结构称为图像文件格式。目前广为流传的图像文件格式有许多种,常见的格式包括BMP, GIF, JPEG, TIFF,PSD, DICOM, MPEG等。在各种图像文件格式中,一部分时由某个软硬件厂商提出并广泛接受和采用的格式,如BMP, GIF和PSD格式。另一部分是由各种国际标准组织提出的形式,例如JPEG/ TIFF和DICOM,其中JEPG是国际静止图像压缩标准组织提出的格式,TIFF是由部分厂商组织提出的格式,DICOM是医学图像国际标准组织提取的医学图像专用格式。
       BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,所以称为位图(bitmap)文件,因其文件扩展名为BMP,故称为BMP文件格式,简称BMP文件。
       BMP文件结构:
       BMP文件图像被分成4部分:位图文件头、位图信息头、颜色表和位图数据。
       第一部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。
       第二部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节。
       第三部分为颜色表。颜色表实际上时一个RGBQUAD结构的数组,数组的长度由biClrUsed指定。RGBQUAD结构是一个结构体类型,占4个字节。
       第四部分是位图数据,即图像数据,其紧跟在位图文件头、位图信息头和颜色表(如果有颜色表的话)之后,记录了图像的每一个像素值。对于由颜色表的位图,位图数据就是该像素颜色在调色板中的索引值。对于真彩色图,位图数据就是实际的R, G, B值(三个分量的存贮顺序是R, G, R)。
       windows规定一个扫描行所占的字节数必须是4的倍数,不足4的倍数则要对其进行扩充。一般来说,BMP文件的数据是从图像的坐下角开始逐行扫描的,即从下到上、从左到右,将图像的像素值一一记录下来,因此图像坐标零点在图像坐下角。

        假设内存中位图数据的指针为pBmpBuf,一行像素所占的字节数为lineByte(4的倍数)那么,对于灰度图像,第i行第j列的像素指针(所在的存储空间位置)为pBmpBuf+i*lineByte+j , *(pBmpBuf+i*lineByte+j)是该像素的灰度值,如果想让该像素变成指定颜色,只需要给*(pBmpBuf+i*lineByte+j)赋指定的值即可;对于彩色图像,每像素占3个字节,那么pBmpBuf+i*lineByte+j*3+0、pBmpBuf+i*lineByte+j*3+1、pBmpBuf+i*lineByte+j*3+2分别代表了第i行第j列像素B、G、R三个分量的指针,若想给该点指定一种颜色,则需要给三个分量分别赋值。
        灰度图像的颜色表是一个256个表项的RGBQUAD结构体数组,而每个RGBQUAD中的R、G、B分量的值是相等的。随着颜色表驻足下标从0到255变化,颜色表数组元素。R、G、B分量也从0到255依次变化。灰度图像的位图数据每像素一个字节,其值为0到255之间的一个,当显示一幅灰度图像时,系统根据像素值,到颜色表数组下表与之对应的表项(数组元素)中查看颜色,根据该表项中的颜色显示像素。由于灰度图像颜色表每个表项中R、G、B分量相等,因此只有图像亮度信息,没有颜色信息,因而显示出的灰度也就没有颜色了。
        从以上的解释中我们知道,图像颜色表决定了图像的颜色,如果对灰度图像的颜色表中的数据进行改变,图像颜色自然也就被改变了。改变后弧度图像颜色表改变,此时颜色表R、G、B三个分量的值已经不再相等,因此图像也就具有了颜色信息,只不过此时的颜色并不是物体真实的颜色。

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

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

相关文章

aop理解

1.切面(Aspects)常常通过通知(advice)、切点(pointcuts)和织入点(join points)来描述 2.通知(advice)有5种 Before——前置通知,在调用目标方法之…

Php 与 Json

PHP与JSON 在PHP中存在两个与JSON相关的函数: json_encode($array或$object)函数:把一个数组或对象转化为JSON格式的字符串 json_decode($json,$flag)函数:把一个JSON格式的字符串转化为数组或对象 $flag :true,代表转…

docker supervisor + compose

一: Supervisor Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务。但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面…

AngularJS(1)——入门学习

AngularJs相关概念 在w3schools中针对AngularJs的介绍为: AngularJS extends HTML with new attributes. AngularJS is perfect for Single Page Applications (SPAs). ProAuditObject ProAuditObj1 new ProAuditObject(); ProAuditObj1.setLproid(proId); Pr…

C# 字符,字符串和文本处理。

1. 字符: 在.net中 字符是表示成16为Unicode代码值。每个字符都是System.Char结构(一个值类型)的实例。 public class StringTempte{public static void GetChar(){double d;d char.GetNumericValue(\u0033);Console.WriteLine(d.ToString()…

opencv2.2.0源代码(include文件)分析

由于openCV2.2.0源文件很庞大,这里我只分析openCV2.2.0文件组织结构的各个模块的include文件(重点分析各个模块下引用的算法和实现的功能),而不是src文件。这里分析各个模块有助于更好的从整体把握和理解openCV2.2.0。这里只是自己…

【pyqt5学习】——tableWidget学习

设置单元格列宽 self.tableWidget.setColumnWidth(0,200) 设置第一行和表头之间的表格线 self.tableWidget.horizontalHeader().setStyleSheet("QHeaderView::section{background:skyblue;color: black;}")

SUSE团队已将重心偏向GCC 7

2019独角兽企业重金招聘Python工程师标准>>> SUSE的Andreas Jaeger在博客中发表了一篇关于SUSE Linux Enterprise Server 12操作系统更新工具链以及它所带来的新开发工具的博文。文章指出,随着GNU Compiler Collection 7的发布,GCC团队为开发…

eclipse-连接TFS错误 the server to respond with a valid http response解决方法

解决办法 如果普通凭证有多个,则将普通凭证给删除。 转载于:https://www.cnblogs.com/nidongde/p/6277243.html

Mysql源码安装

首先去http://dev.mysql.com/downloads/mysql/5.6.html 下载mysql的源代码,记住是source code,别下别的版本 1.安装依赖的包 yum -y install cmake gcc-c bison ncurses ncurses-devel 2.创建mysql的安装目录及数据库存放目录 mkdir -p /usr/local/mysql…

PDB文件:每个开发人员都必须知道的

一 什么是PDB文件 大部分的开发人员应该都知道PDB文件是用来帮助软件的调试的。但是他究竟是如何工作的呢,我们可能并不熟悉。本文描述了PDB文件的存储和内容。同时还描 述了debugger如何找到binay相应的PDB文件,以及debugger如何找到与binay对应的源代码…

【pyqt5学习】——graphicView显示opencv图像

imgpath "result.jpg"img cv2.imread(imgpath) # 读取图像img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 转换图像通道x img.shape[1] # 获取图像大小y img.shape[0]self.zoomscale 1 # 图片放缩尺度frame QImage(img, x, y, x * 3, QImage.Format_RGB888)…

项目总结——机房收费系统合作版

机房合作就结束了,这次合作开发是第一次与别人一块儿开发一个系统,收获还是蛮大的。以下我总结几点算是经验吧,供以后參考: 管理上1.计划在准备合作开发之前我们三个去找米老师,老师给我们规定了时间。半个月。尽管计划…

CenterOs 防火墙设置

为什么80%的码农都做不了架构师?>>> 1. 重启后生效的 开启: chkconfig iptables on 关闭: chkconfig iptables off 2. 及时生效 开启: service iptables start 关闭: service iptables stop 查看防火墙规则…

设计模式六大原则(3)——依赖倒置原则

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下…

【机器学习——决策树】——两种方法实现,含模型的保存和调用

目录 1、ID3算法 2、使用sklearn API——模型保存和调用成功 1、ID3算法 以下实现了决策树的创建、可视化绘制、决策树的保存和调用 但是在利用决策树进行预测的时候出现错误 分类代码 #实用决策树进行分类 def classify(inputTree, featLabels, testVec): firstStr = in…

重温 const 指针

在进行声明指针时,可以在类型前或后使用关键字const,也可在两个位置都使用。 下面都是合法的声明,但是含义大不同: const int * pOne; //指向整形常量 的指针,它指向的值不能修改 int * const pTwo; //指向整…

提交MTBF eservice以及log注意事项

[DESCRIPTION]提交MTBFeservice需要注意的描述,log事项[SOLUTION]提交MTBF eservice时,请注意1.描述清楚问题现象2. 描述清楚问题发生的时间点3.描述清楚问题发生时在run的case提交log时请注意1.MTBF的log通常会很大,若log太大,只…

Apache Cassandra和Apache Ignite:关系并置和分布式SQL

为什么80%的码农都做不了架构师?>>> 在上一篇文章中,回顾和总结了Cassandra中使用的查询驱动数据模型(或者说非常规数据模型)方法论的缺陷。事实证明,如果不对查询有深入的了解,通过该方法论将…

Android高级开发专题晋升班

Android高级开发专题晋升班 适用人群:1-3年以上经验的开发者丨学员平均薪酬20K/月转载于:https://www.cnblogs.com/lythonliu/p/6285531.html