本文最后更新于:2025年1月17日 上午

标签图像文件格式(Tagged Image File Format,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像,与其他格式不同的是 TIFF 可以存储浮点数据。

简介

标签图像文件格式(Tagged Image File Format,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。它最初由Aldus公司与微软公司一起为PostScript打印开发。TIFF与JPEG和PNG一起成为流行的高位彩色图像格式。TIFF格式在业界得到了广泛的支持,如Adobe公司的Photoshop、The GIMP Team的GIMP、Ulead PhotoImpact和Paint Shop Pro等图像处理应用、QuarkXPress和Adobe InDesign这样的桌面印刷和页面排版应用,扫描、传真、文字处理、光学字符识别和其它一些应用等都支持这种格式。如今Adobe公司从Aldus获得了印刷应用程序-PageMaker之后控制着TIFF的规范。

术语“Tagged Image File Format”或者*“Tag Image File Format”*在一些早期的TIFF规范中是作为副标题存在的。当前的TIFF规范TIFF 6.0 不再使用这些术语,现在的名字仅仅叫做“TIFF”。

做为一种标记语言,TIFF与其他文件格式最大的不同在于除了图像数据,它还可以记录很多图像的其他信息。它记录图像数据的方式也比较灵活, 理论上来说, 任何其他的图像格式都能为TIFF所用, 嵌入到TIFF里面。比如JPEG, Lossless JPEG, JPEG2000和任意数据宽度的原始无压缩数据都可以方便的嵌入到TIFF中去。由于它的可扩展性, TIFF在数字影响、遥感、医学等领域中得到了广泛的应用。TIFF文件的后缀是.tif或者.tiff

对于工程应用来说,TIFF 最关键的性质在于可以保存浮点型数据,这样可以使得 OpenCV 可以保存、读取更精确的矩阵数据。

读取 TIFF 图像

Python

1
img = cv2.imread('img.tiff', cv2.IMREAD_UNCHANGED)

大图读取

1
2
3
import imageio.v3 as iio
with iio.imopen(file_path, 'r') as image_file:
img = image_file.read()

或者

1
2
3
4
5
# pip install Pillow
from PIL import Image

# 打开一个TIFF图像
img = Image.open('example.tif')

C++

1
cv::Mat img = cv::imread("img.tiff", cv::IMREAD_UNCHANGED);

读取 TIFF 信息

Python

1
2
3
4
5
6
# pip install rasterio

import rasterio
with rasterio.open('img.tiff') as src:
print(src.meta)
img = src.read()

写入 TIFF 图像

Python

1
cv2.imwrite('img.tiff', img)

img 可以是 float32 或 float64 类型,读取出来的数据都和之前完全相同

C++

1
cv::imwrite("img.tiff", img)

写入 TIFF 信息

Python

可以使用PIL(Pillow)库或者rasterio库向TIFF图片添加属性(元数据)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from PIL import Image, TiffTags, TiffImagePlugin

# 打开一个TIFF图像
img = Image.open('example.tif')

# 添加自定义标签和值
tag = 65000 # 自定义标签,确保不与标准TIFF标签冲突
value = 'My Custom Metadata'

# 将标签和值添加到图片的元数据中
if tag not in TiffTags.TAGS:
TiffTags.TAGS[tag] = tag

TiffImagePlugin.WRITE_LIBTIFF = True
img.tag_v2[tag] = value

# 保存图像,这将覆盖原始文件,所以如果需要保留原始文件,请先复制它
img.save('example_with_metadata.tif')

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import rasterio
from rasterio.plot import show

# 打开一个TIFF图像
with rasterio.open('example.tif', 'r+') as src:
# 添加元数据
src.meta['my_custom_metadata'] = 'My Custom Metadata'

# 更新图像的元数据
src.update_tags(1, my_custom_metadata='My Custom Metadata')

# 可以添加更多的元数据
src.update_tags(1, another_metadata='Another Value')

# 如果需要保存更改,可以这样做(这将覆盖原始文件)
# src.write(src.read())

参考资料



文章链接:
https://www.zywvvd.com/notes/study/image-processing/format/tiff/opencv-tiff/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

TIFF 格式图像
https://www.zywvvd.com/notes/study/image-processing/format/tiff/opencv-tiff/
作者
Yiwei Zhang
发布于
2023年4月8日
许可协议