PFM  图片格式

参考:   https://linux.die.net/man/5/pfm

1. 描述

本文档描述了Netpbm转换器pamtopfm(1)和pfmtopam(1)所理解的PFM图形图像文件格式。

世界上有多种称为PFM的相似格式,它们都没有权威的记录。这里描述的格式是布赖恩亨德森从一个他发现处理'PFM'格式的程序中推断出来的格式。

PFM格式受Netpbm格式的启发,您会看到很多相似之处。不过,它不是官方的Netpbm格式。其目标与Netpbm格式不一致。

2. 格式

PFM图像是一个字节流。该流包含一个标题,紧接着是一个光栅。下面介绍这两个组件。所描述的部分之前或之后没有分隔符。

(1) PFM标题  PFM header

PFM标题是ASCII文本的连续3行'行'。每行之后是一个空格字符。该字符通常是换行符,因此是“行”,但不一定是。

pamtopfm在它生成的PFM中使用换行符。

(2)  Identifier Line

标识符行包含字符'PF'或'Pf'。 PF意味着它是一种彩色PFM。 Pf表示这是一个灰度PFM。

(3) 尺寸线  Dimensions Line

尺寸线包含两个正整数,用空格分隔。首先是图像的宽度;第二个是图像的高度。两者都以像素为单位。

(4) 比例因子/字节顺序  Scale Factor / Endianness

比例因子/字节顺序线是一个奇怪的线,它将字节顺序信息压缩成一个合理的尺度描述。该行由非零十进制数组成,不一定是整数。如果数字是负数,那意味着PFM栅格是小端。否则,它是大端。数字的绝对值是图像的比例因子。

比例因子告诉栅格中样本的单位。你用某种方式将它与一些单独理解的单位信息一起用来将样本值转化为有意义的值,例如每平方米的瓦数。

(5) PFM光栅  PFM raster

栅格是一系列像素,一个接一个地打包,没有任何类型的分隔符。它们采用标准的西方阅读顺序:从图像中的左到右和从上到下。

每个像素由1或3个样本组成,一个接一个地打包,没有任何类型的分隔符。 1个样本用于灰度PFM,3个用于彩色PFM(请参阅PFM标头的标识行)。

每个样本由4个连续的字节组成。这些字节表示一个32位字符串,采用大端或小端格式,由PFM标头的比例因子/字节顺序线确定。该字符串是IEEE 32位浮点数字代码。由于这与大多数CPU和编译器使用的格式相同,因此在处理字节序变化后,通常可以让程序直接将字节用作浮点数。

PFM 图片写入

参考:    https://github.com/Microsoft/AirSim         common_utils/Utils.hpp

 static void writePfmFile(const float * const image_data, int width, int height, std::string path, float scalef=)
{
std::fstream file(path.c_str(), std::ios::out | std::ios::binary); std::string bands;
float fvalue; // scale factor and temp value to hold pixel value
bands = "Pf"; // grayscale // sign of scalefact indicates endianness, see pfm specs
if(isLittleEndian())
scalef = -scalef; // insert header information
file << bands << "\n";
file << width << " ";
file << height << "\n";
file << scalef << "\n"; if(bands == "Pf"){ // handle 1-band image
for (int i=; i < height; i++) {
for(int j=; j < width; ++j){
fvalue = image_data[i * width + j];
file.write(reinterpret_cast<char *>(&fvalue), sizeof(fvalue));
}
}
}
}

PFM 图片格式的更多相关文章

  1. PPM图片格式及其C读写代码

    PPM图像格式介绍 PPM图像格式是由Jef Poskanzer 大叔,在我出生那一年,也就是1991年所创造的,碰巧的是PPM也是天蝎座. PPM(Portable Pixmap Format)还有 ...

  2. 【VC++技术杂谈007】使用GDI+进行图片格式转换

    本文主要介绍如何使用GDI+对图片进行格式转换,可以转换的图片格式为bmp.jpg.png. 1.加载GDI+库 GDI+是GDI图形库的一个增强版本,提供了一系列Visual C++ API.为了使 ...

  3. JS验证图片格式和大小并预览

    用于上传图片的js验证: <%@ page language="java" contentType="text/html; charset=UTF-8"p ...

  4. PNG和Gif及JPEG图片格式比较

    Gif格式特点 透明性Gif是一种布尔透明类型,既它可以是全透明,也可以是全不透明,但是它并没有半透明(alpha 透明). 动画Gif这种格式支持动画. 无损耗性Gif是一种无损耗的图像格式,这也意 ...

  5. JavaScript校验图片格式及大小

    <!DOCTYPE html> <html> <head> <title>JavaScript校验图片格式及大小</title> <s ...

  6. 前端工程师技能之photoshop巧用系列第四篇——图片格式

    × 目录 [1]图片格式 [2]保存设置 前面的话 对于前端来说,图片格式是需要重要掌握的知识.本文是photoshop巧用系列第四篇——图片格式 图片格式 目前在前端的开发中常用的图片格式有jpg. ...

  7. 利用PhotoShop将Font-Awesome转为图片格式

    介绍如何将Font-Awesome等字体图标转换为图片格式,使用PHOTPSHOP很简单. 网上找了很多,都比较麻烦.别问为什么要这么做,因为你还没遇到需要的时候. 下载Font-Awesome字体库 ...

  8. 【faster-rcnn】训练自己的数据——修改图片格式、类别

    修改图片格式 matlab代码 其实内部一些代码是用了rbg的fast-rcnn代码的. \datasets\VOCdevkit2007\VOCcode\VOCinit.m里面,查找'jpg',改成' ...

  9. BMP图片格式

    BMP图片 BMP采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大.BMP文件的图像深度可选lbit.4bit.8bit及24bit和32bit.BMP文 ...

随机推荐

  1. python安装包API文档

    在python开发过程中,经常会使用第三方包,或者内置的包. 那么这些包,具体有哪些选项,有哪些方法,你知道吗?下面介绍一种万能方法. 使用命令:<注意,命令里python显示的API版本是根据 ...

  2. python2精确除法

    python2和python3除法的最大区别: python2: print 500/1000 python2结果:取整数部分,小数并没有保留 0 Process finished with exit ...

  3. Go 初体验 - channel.2 - 超时机制

    channel 虽然很好用,但是我们也要考虑异常情况,比如:超时 go 语言怎么解决这个超时问题呢? 可以利用 select 语句: select 的用法与 switch 语言非常类似,由 selec ...

  4. Python记录13:软件开发目录规范

    软件开发目录规范 开发一个软件,一个工程项目,一般应该具备以下的几个基本的文件夹和模块,当然,这并不是一成不变的,根据项目的不同会有一定的差异,不过作为一个入门级的新手,建议暂时按照以下的规范编写: ...

  5. Practical Lessons from Predicting Clicks on Ads at Facebook

    ABSTRACT 这篇paper中作者结合GBDT和LR,取得了很好的效果,比单个模型的效果高出3%.随后作者研究了对整体预测系统产生影响的几个因素,发现Feature(能挖掘出用户和广告的历史信息) ...

  6. acm 2015北京网络赛 F Couple Trees 主席树+树链剖分

    提交 题意:给了两棵树,他们的跟都是1,然后询问,u,v 表 示在第一棵树上在u点往根节点走 , 第二棵树在v点往根节点走,然后求他们能到达的最早的那个共同的点 解: 我们将第一棵树进行书链剖,然后第 ...

  7. vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题

    vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题 今天下载了一个开源项目一直运行不了,折腾了半天才找到问题所在,config ...

  8. (转) SpringMVC学习笔记-

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. double保留两位小数

    public static String format(double dValue, int lScale) { // ////负数,则装化为正数后进行四舍五入 boolean bFlag = fal ...