PPM / PGM / PBM 图像文件格式[转]
下面将详细介绍ppm文件
ppm文件是一种图像文件,有其自己的文件格式。ppm文件由两个部分组成:第一个部分是三行ASCII码,这个部分决定了图像的存储格式以及图像的特征;第二个部分就是图像的数据部分,图像就是由这个部分组成的。
ppm的第一部分由三行ASCII码组成
第一行是P2/P3/P6
第二行是图像的大小,先是列像素数,后是行像素数,中间有一个空格
第三行是一个介于1和65535之间的整数,而且必须是文本的,用来表示每一个像素的一个分量用几个比特表示。
三行之后是图像的数据流,从左到右,从上到下。在进行图像数据存储的时候,需要进行数据的格式,假如需要的像素值在0~255之间,那么在进行数据文件保存的时候,所写入文件的值就必须是以%c的形式输入,而且数据之间没有明显的分离字符,图像处理软件会自动地识别这些像素的值,并给予处理。
PPM->Portable PixMap
PGM->Portable GreyMap
PBM->Portable BitMap
PBM支持单色图(1个像素位)
PGM支持灰度图形,能够读PBM图形和PGM图形,输出PGM图形
PPM支持真彩色图形,可以读上面所有格式,输出PPM图形
PPM
PPM图形文件格式包括两个部分,头部分和图象数据部分。头部分由三部分组成,这三部分由回车或换行分割,但PPM的标准中是要求空格。第一行通常是P3或P6,说明是PPM格式;第二行是图象的宽度和高度,用ASCII来表示;最后一部分是描述像素的最大颜色组成,这里允许描述超过一个字节(0-255)的颜色值。另外可以在上面个部分的后面用#来追加注释,注释行是从#到该行末。
下面是PPM头的例子:
例子1:
P6 1024 778 255
例子2:
P6
1024 778
255
例子3:
P6#PPM文件格式
1024 778#宽度和高度
注释
255
PPM图象数据的格式依赖于PPM自身的表示,如果是P3格式,数据将以ASCII文本来表示,每个像素的值从0到前面的最大值,每行不应该长于70个字符,如下:
例子4:
P3
4 4
15
0 0 0 0 0 0 0 0 0 15 0 15
0 0 0 0 15 7 0 0 0 0 0 0
0 0 0 0 0 0 0 15 7 0 0 0
15 0 15 0 0 0 0 0 0 0 0 0
如果是P6格式,图象数据以字节格式存储,每个色彩成分(R,G,B)一个字节。仅仅在头部的最后一个字段的前面才能有注释,在头部的最后一个字段后面通常是一个回车或换行。P6图象文件比P3文件小,读起来更快。注意,P6文件仅仅用作但字节彩色。
但并没有按照格式规约的要求来,通常的习惯,图象从上到下,从左到右被存储。每个像素以一个字节来存储,0表示黑色,255表示白色。色彩成分按照通常的红-绿-蓝顺序爱存储。
PGM
该格式文件存储灰度图形,也就是这里每个像素使用一个值来表示而不是3个(R,G,B)。同PPM唯一不同的是头部用P2和P5,分别表示用ASCII和字节码来表示数据。
例如:
P2
24 7
15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PBM
使用ASCII的0或1方式来表示数据,0表示白色,1表示黑色。与PPM、PGM不同的头部是少了第三行,因为第三行的最大色彩值在这个模式下已经没有意义了;如下:
PBM example
P1
24 7
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PPM文件格式分三种:
PPM灰度文件
文件头由3行文本组成,可由fgets读出
1)第一行为“P2",表示文件类型
2)第二行为图像的宽度和高度
3)第三行为最大的象素值255
接下来是图像数据块。按行顺序存储。每个象素占4个字节,灰度通道为4字节ASCII码表示的整数,高字节在前。左上角为坐标原点。16位PPM文件(至少适用于读取由DCRAW生成的PPM文件)
文件头由3行文本组成,可由fgets读出
1)第一行为“P6",表示文件类型
2)第二行为图像的宽度和高度
3)第三行为最大的象素值
接下来是图像数据块。按行顺序存储。每个象素占3个字节,依次为红绿蓝通道,每个通道为1字节整数。左上角为坐标原点。PPM彩色文件
文件头由3行文本组成,可由fgets读出
1)第一行为“P3",表示文件类型
2)第二行为图像的宽度和高度
3)第三行为最大的象素值255
接下来是图像数据块。按行顺序存储。每个象素占12个字节,依次为红绿蓝通道,每个通道为4字节ASCII码表示的整数,高字节在前。左上角为坐标原点。
可移植像素图格式(PPM),可移植灰度图格式(PGM)和可移植位图格式(PBM)是便于跨平台的图像格式。有时候也被统称为PNM格式。
历史
PBM格式由Jef Poskanzer在20世纪80年代发明,为了便于通过电子邮件,用ASCII码表示单色位图,能够承受一般的文本格式的变动。
第一个处理PBM格式的工具库是Pbmplus。它由这个格式的发明人Jef Poskanzer开发,在1988年发布。主要包含Jef编写的将PBM转化为已存在的其他图像格式的工具。在1988年末,Jef开发出PGM、PPM格式以及相关工具,并加入Pbmplus中。Pbmplus的最终发布日期是1991年12月10日。
在1993年,Netpbm库开始开发,用来替代不再维护的Pbmplus。它是Pbmplus的简单的重新包装,附加全世界开发者提供的额外功能和修订,可能是目前用的最普遍的处理PBM、PGM和PPM格式的工具库。
文件格式描述
这三种格式在颜色的表示上有差异。PBM是单色,PGM是灰度图,PPM使用RGB颜色。
每个文件的开头两个字节(ASCII码)作为文件描述子,指出具体格式和编码形式。具体见下表:
文件描述子 类型 编码
P1 位图 ASCII
P2 灰度图 ASCII
P3 像素图 ASCII
P4 位图 二进制
P5 灰度图 二进制
P6 像素图 二进制
PPM / PGM / PBM 图像文件格式[转]的更多相关文章
- PPM / PGM / PBM 图像文件格式
PPM / PGM / PBM 图像文件格式 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:在进行图像压缩后传输,然后解压缩显示的过程中,通常会用到P ...
- C# 如何将PDF转为多种图像文件格式(Png/Bmp/Emf/Tiff)
PDF是一种在我们日常工作学习中最常用到的文档格式之一,但常常也会因为文档的不易编辑的特点,在遇到需要编辑PDF文档内容或者转换文件格式的情况时让人苦恼.通常对于开发者而言,可选择通过使用组件的方式来 ...
- 【转】PNG图像文件格式
5.2 PNG图像文件格式 PNG是可携式网络图像(portable network graphics)的英文缩写.PNG是从网络上开始发展的,目的是替代GIF和JPG格式,PNG图像文件格式也是当 ...
- 【转】BMP图像文件格式
5.1 BMP图像文件格式 BMP图像文件格式是游戏中常用的图像资源文件格式,BMP图像文件起源早,程序员对BMP都比较熟悉,再加上BMP格式简单,读取和写入非常容易实现,所以无论Windows的还 ...
- ppm\pgm格式
PGM 是便携式灰度图像格式(portable graymap file format),在黑白超声图像系统中经常使用PGM格式的图像.文件的后缀名为".pgm". PGM格式图像 ...
- bmp图像文件格式说明
bmp图片文件包含4个部分数据,位图文件头,位图信息头,颜色表和位图数据(即RGB值). 在看位图格式之前先看一个问题,如果每个像素都用前面的24位色去表示,那么一个像素值需要3个字节数据,24位色也 ...
- OpenCV3编程入门笔记(1)图像载入、显示、保存、变换灰度图
图像载入.显示.保存函数: 1 图像载入函数:imread() Mat imread(const string& filename, int flags=1); const ...
- OpenCV2:第四章 导出图像
一.简介 一般我们用OpenCV来处理图像数据的时候,OpenCV已经把图像数据包装成一个图像数据类,我们只需要对类成员的像素值进行修改就行了. 但是在Windows开发的WinSDK/MFC中,对图 ...
- OpenCV入门学习笔记
OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...
随机推荐
- 2019牛客暑期多校训练营(第八场)-A All-one Matrices (单调栈+前缀和)
题目链接:https://ac.nowcoder.com/acm/contest/888/A 题意:给n×m的01矩阵,求出其中全为1的矩阵个数(不被其它全1矩阵包括). 思路:和第二场多校的次大子矩 ...
- 【Python】【demo实验11】【练习实例】【三个整数的立方和】
目的:找到 除了9n±4型自然数外,所有100以内的自然数都能写成三个整数的立方和 这每个数的表达方式: 源代码: #!/usr/bin/python # encoding=utf-8 # -* ...
- [转帖]利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞
利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞 2018年08月02日 10:06:03 Minza 阅读数 483 https://blog.csdn.net/ha ...
- DOS ftp
C:\>ftp /? 将文件传送到运行 FTP 服务器服务(经常称为后台程序)的计算机以及将文件从该计算机传出.可以交互使用 Ftp. FTP [-v] [-d] [-i] [-n] [-g] ...
- Clone()方法详解
一.克隆的原理与应用 clone在堆上分配内存,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法返回,一个新的相同的 ...
- 使用Minikube运行一个本地单节点Kubernetes集群(阿里云)
使用Minikube运行一个本地单节点Kubernetes集群中使用谷歌官方镜像由于某些原因导致镜像拉取失败以及很多人并没有代理无法开展相关实验. 因此本文使用阿里云提供的修改版Minikube创建一 ...
- SpringBoot起飞系列-数据访问(九)
一.前言 前边我们已经学些了开发的基本流程,最重要的一步来了,怎么样和数据库交互才是最重要的,毕竟没有数据那就相当于什么也没做,本文我们来学习使用springboot整合jdbc.mybatis.jp ...
- Swoft2.x 小白学习笔记 (四) --- RPC
介绍 swoft 中 RPC使用:搭建访问服务端和客户端 RPC服务端: 一.配置,在文件 /app/bean.php中添加 return [ 'rpcServer' => [ 'class' ...
- python *****【异常处理】*****
try: val = input('请输入数字:') num = int(val) except Exception as e: print('操作异常') # import requests # # ...
- 前端 CSS 2
无序列表去除自带的样式 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...