zoukankan      html  css  js  c++  java
  • PPM / PGM / PBM 图像文件格式

    PPM / PGM / PBM 图像文件格式


    声明:引用请注明出处http://blog.csdn.net/lg1259156776/


    说明:在进行图像压缩后传输,然后解压缩显示的过程中,通常会用到PPM / PGM / PBM 图像文件格式来对解压后的图像像素值进行存储,因为没有进行压缩,所以不丢失信息,但同时也文件比较大。本文就是对这种图像文件格式进行介绍。


    总论

    PPM(Portable PixMap)是portable像素图片,是由netpbm项目定义的一系列的portable图片格式中的一个。这些图片格式都相对比较容易处理,跟平台无关,所以称之为portable,就是比较直接的图片格式。比如PPM,其实就是把每一个点的RGB分别保存起来。所以,PPM格式的文件是没有压缩的,相对比较大,但是由于图片格式简单,一般作为图片处理的中间文件(不会丢失文件信息),或者作为简单的图片格式保存。

    格式分析

    netpbm的几种图片格式是通过其表示的颜色类型来区别的,PBM是单色图,只有黑色和白色,PGM是灰度图片PPM是代表完整的RGB颜色的图片,有时也统称为PNM格式。

    (1) 文件头

    文件头由三个部分组成:这几个部分之间用回车或换行分隔(但是PPM标准中要求是空格)。

    第一部分是文件magic number
    每一个netpbm图片由两个字节的magic number (ASCII)组成,来标识文件的类型(PBM/PGM/PPM)以及文件的编码(ASCII或binary)。

    • P1  单色图  ASSII  PBM
    • P2  灰度图  ASSII  PGM
    • P3  像素图  ASSII  PPM
    • P4  单色图  二进制  PBM
    • P5  灰度图  二进制  PGM
    • P6  像素图  二进制  PPM

    第二部分是图像宽度和高度(空格隔开),用ASCII表示。

    第三部分是描述像素的最大颜色组成,允许描述超过一个字节(0-255)的颜色值。

    另外,在上面的三个部分里面,都可以使用”#”插入注释,注释是#到行尾(回车或换行)部分。

    (2) 图像数据部分

    对于ASCII格式,就是按照RGB的顺序排列,以ASCII存储,并且,RGB中间用空格隔开,图片每一行用回车隔开。

    对于binary格式,就是每一个像素点的RGB值分别顺序存储并且按二进制写入文件,没有任何分隔。

    例子

    PPM

    例子1:
    P6 1024 778 255

    例子2:
    P6
    1024 778
    255

    例子3:

    P6#PPM文件格式
    1024 778#宽度和高度
    255

    通常的习惯,图象从上到下,从左到右被存储。色彩成分按照通常的红-绿-蓝顺序存储。

    PGM

    该格式文件存储灰度图形,也就是这里每个像素使用一个值来表示而不是3个(R,G,B)。同PPM唯一不同的是头部用P2和P5,分别表示用ASCII和字节码来表示数据。

    例如:
    P2
    24 7
    15

    PBM

    使用ASCII的0或1方式来表示数据,0表示白色,1表示黑色。与PPM、PGM不同的头部是少了第三行,因为第三行的最大色彩值在这个模式下已经没有意义了。

    如下:

    P1# PBM example
    24 7


    2015-10-15 艺少

  • 相关阅读:
    python函数第4天(day 23)
    python函数第3天(day 22)
    python函数第2天(day 21)
    python函数第一天(day 20)
    opencv笔记一(Mat初始化及Mat传递)
    ubuntu上opencv源码安装
    ubuntu上显卡驱动安装——GeForce GTX 1080 Ti
    ubuntu上CUDA9.0和CUDNN7.0安装
    vscode配置opencv c++开发环境
    opencv中Mat的属性
  • 原文地址:https://www.cnblogs.com/huty/p/8519014.html
Copyright © 2011-2022 走看看