灰度图像的BMP格式是什么(特别是每像素16位)? wikipedia只讨论了bmp的彩色图像。
更新
只是为了更新和未来访问者的信息,我将PGM,因为它是未压缩的,可以支持16位灰度。另一种选择是使用PNG,但它会压缩数据(这不是我想要的),正如所讨论的那样here。 另请注意,图像可能会显得失真,因为大多数显示器支持256色而不支持4096(16位)。所以图像会饱和。
令人惊讶的是,在16位图像的灰度级情况下,BMP几乎几乎无助。
感谢帮助我理解这个问题的人。
答案 0 :(得分:4)
对于灰度图像,我会使用8位BMP。 8位BMP可以使用调色板对颜色进行编码。但是,如果您不使用颜色值,则可以将颜色值[0...255]
解释为从黑色(0)到白色(255)的颜色。
编辑:我不会将BMP用于16位灰度图像。从技术上讲,您可以使用16位/像素BMP格式来编码16位灰度数据(http://en.wikipedia.org/wiki/BMP_file_format#Pixel_format)。然而在实践中这是一个坏主意(阅读:hacky),因为该深度旨在编码像素的alpha,红色,绿色和蓝色样本。
用于存储每像素16位灰度数据的更好格式是PNG。
还要问问自己,你真的,真的需要超精确吗?对于大多数应用,每像素8位就好了(=如果你对精度没有任何特殊要求,那就是这种情况)。
答案 1 :(得分:2)
你是对的,BMP只知道颜色。这样做的方法是创建256个条目的调色板,其中每个条目对R,G,B具有相同的值:第一个条目(0,0,0),第二个条目(1,1,1)等。现在使用调色板使图像每像素8位。
编辑:鉴于您对16位灰度的新要求,我认为您有两种选择:转换为8位,或者使用不同于BMP的其他格式。
答案 2 :(得分:2)
如图所示,TIFF和PNG原生支持16位灰度。
http://en.wikipedia.org/wiki/Grayscale
我假设您想要保存的这些图像不仅仅是用于显示,而是用于需要额外精度的某种后期处理?如果没有,那么我建议删除最低有效8位,并存储带有颜色映射的更简单的8位位图,以将每个值映射到具有值的RGB - > (值,值,值)RGB映射。
答案 3 :(得分:0)
灰度图像的BMP格式是什么
除了使用调色板之外,还可以通过用BITMAPV4HEADER
编写BMP来创建灰度BMP(每像素8位)。并将bV4RedMask
,bV4GreenMask
和bV4BlueMask
设置为相同的值。但是,这种格式的最小bcBitCount
值为16,因此每个像素仍需要占用两个字节。不过,您可以将第二个字节用于alpha通道(透明度)。
尤其是每个像素16位
看起来没有任何BMP版本支持16位色深。即使文件格式看似允许使用bcBitCount=16
和bV4…Mask=0xFFFF
,图像编辑器和库也会丢弃多余的位。
Some documents指的是64-BPP BMP文件,但是尚不清楚它与BITMAPV4HEADER
字段如何匹配,因为mask字段的大小均为32位(因此无法指定64 BPP的通道掩码)。
另一种选择是使用PNG,但是它会压缩数据(这不是我想要的),如此处所述。
如果您不想压缩PNG文件,则无需压缩。使用0压缩级别会将像素保持原样(加上zlib页眉/页脚)。
还请注意,由于大多数显示器支持256色而不是16位4096,所以图像可能看起来失真。
16位深度将允许65536个不同的每通道亮度值,而不是4096。失真听起来像是伽马曲线的问题,并且与文件格式问题无关。