用LibTIFF c++编写10,12位TIFF文件
Writing 10,12 bit TIFF files with LibTIFF C++
我正在尝试用LibTIFF编写10,12位RGB TIFF文件。
像素数据本地保存在unsigned short
缓冲区(16位)
1)如果我将TIFFTAG_BITSPERSAMPLE
设置为10或12,则从缓冲区读取的比特不足,输出不正确。(我知道它只是每个组件读取10或12位,而不是16,这就是问题)
2)我试着把比特打包到缓冲区中,这样它就真的是12-R, 12-G, 12-B了。在这种情况下,我认为文件写入正确,但我找不到可以正确显示此图像的查看器。
3)如果我设置TIFFTAG_BITSPERSAMPLE
为16,观众可以显示TIFF图像,但我有一个问题,我不知道如果图像最初是10或12位(如果我想以后用LibTIFF读取它)。此外,观看者希望动态范围是16位,而不是10位或12位,这也会导致糟糕的视图。
4)最恼人的部分是,我找不到一个10,12,或14位的TIFF图像在网络上看看标题应该是什么样子。
那么最后,将10位或12位图像数据写入TIFF文件?????的正确方法是什么
TIFF规范没有指定在图像中每通道存储10、12或14位的方法。根据编码器和解码器的不同,可能仍然可以处理这样的图像,但它实际上是一个实现细节,因为它们不需要这样做。
如果您希望TIFF中的精度超过8位,您唯一的选择是16位(或浮点数,但这是另一回事)。
我不知道有任何图像格式对这些位深有特定的支持,所以如果你必须用特定的位深存储图像,无论如何查看器都可能会遇到问题。我能想到的最简单的解决方案是将其存储为每像素16位,并将原始位深作为元数据(例如,在ImageDescription标签中),但这一切都取决于图像将用于什么以及为什么需要此信息。
您可以将图像存储为多图像文件。例如,对于12位源,一个图像将是RGB(8)图像,使用上面的8位,第二个16位灰度是低4位和4位填充的组合。这样就可以用标准程序在监视器上查看TIFF,并且可以使用定制软件检索额外的精度。
我不同意"外来"位深度不好的说法。这种格式将使图像大小减少5/6。您甚至可以将第二张图像存储为重新缩放的版本,该版本将4位紧密打包,而不使用填充,以减少3/4的大小。对于非常大的数据集,由于数据的性质,压缩不是一种选择,这种节省是非常重要的。例如,许多科学和机器视觉应用程序可能需要未经掺入的比特。从多图像tiff转换为16位tiff的能力将允许使用标准程序和图像库。
- 如何处理来自MIPI相机的12位图像?
- 将大数字(10-12 位数字)存储在无序映射中<字符串,整数>
- 采用OpenCV Mat<doube>并转换为12位值数组。
- C ++ 12位变量,我该怎么做?
- 当我输入12位数字时,为什么以下代码崩溃
- 为什么以下程序中的输出为 12 字节,而总大小仅为 6 位
- 在 Ubuntu 12.04 32 位上安装和编译 ZeroMQ/ZMQ/0MQ
- 链接错误:在 32 位 arm 处理器上的 Ubuntu 12.04 上"Cannot find -ltinfo"
- 将 16 位单通道图像写入 Tiff
- C++ 中的 10 位或 12 位字段数据类型
- 无法在 ubuntu 12.04 64 位中使用 gloox 库
- C++按位运算,最大值为 12 位整数
- 读取12位输入c++
- 在64位Ubuntu 12.04上运行aapt:加载共享库时出错:libc++.所以:没有这样的文件或目录
- C++如何在容器中加载 16 位 TIFF 文件以对其数据执行数学运算
- 整数[04095]12位到桶{a,B,C}是C++中最快的方式
- 将mmap偏移量的最后12位归零
- c++ 32位tiff图像保存和加载
- 用LibTIFF c++编写10,12位TIFF文件
- 12位图像格式与c++ API